2019-04-17 07:20:01 +02:00
|
|
|
// Copyright 2016-2018, Pulumi Corporation.
|
|
|
|
//
|
|
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
|
|
// you may not use this file except in compliance with the License.
|
|
|
|
// You may obtain a copy of the License at
|
|
|
|
//
|
|
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
//
|
|
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
|
|
// See the License for the specific language governing permissions and
|
|
|
|
// limitations under the License.
|
|
|
|
|
|
|
|
import * as assert from "assert";
|
2020-10-01 21:31:52 +02:00
|
|
|
import { CustomResource } from "../index";
|
2020-10-02 23:29:47 +02:00
|
|
|
import { Output } from "../output";
|
2019-04-17 07:20:01 +02:00
|
|
|
import * as runtime from "../runtime";
|
2020-10-01 21:31:52 +02:00
|
|
|
import { asyncTest } from "./util";
|
2019-04-17 07:20:01 +02:00
|
|
|
|
|
|
|
class FakeResource extends CustomResource {
|
|
|
|
public x?: Output<number>;
|
|
|
|
constructor(name: string, props?: { x: number }) {
|
|
|
|
super("nodejs:test:FakeResource", name, props);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
const testModeDisabledError = (err: Error) => {
|
2019-08-27 03:49:13 +02:00
|
|
|
return err.message === "Program run without the Pulumi engine available; re-run using the `pulumi` CLI";
|
2019-04-17 07:20:01 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
describe("testMode", () => {
|
|
|
|
it("rejects non-test mode", () => {
|
2020-12-17 19:49:22 +01:00
|
|
|
runtime._reset();
|
2021-01-26 23:59:32 +01:00
|
|
|
runtime._setTestModeEnabled(false);
|
2020-12-17 19:49:22 +01:00
|
|
|
|
2019-04-17 07:20:01 +02:00
|
|
|
// Allocating a resource directly while not in test mode errors out.
|
|
|
|
assert.throws(() => { const _ = new FakeResource("fake"); }, testModeDisabledError);
|
|
|
|
// Fetching the project name while not in test mode errors out.
|
|
|
|
assert.throws(() => { const _ = runtime.getProject(); }, testModeDisabledError);
|
|
|
|
// Fetching the stack name while not in test mode errors out.
|
|
|
|
assert.throws(() => { const _ = runtime.getStack(); }, testModeDisabledError);
|
|
|
|
});
|
2020-10-08 04:00:03 +02:00
|
|
|
it("accepts test mode", asyncTest(async () => {
|
2020-10-01 21:31:52 +02:00
|
|
|
// Set up all the test mode envvars, so that the test will pass.
|
2020-12-17 19:49:22 +01:00
|
|
|
runtime._reset();
|
2020-10-01 21:31:52 +02:00
|
|
|
runtime._setTestModeEnabled(true);
|
2020-12-17 19:49:22 +01:00
|
|
|
|
2020-10-01 21:31:52 +02:00
|
|
|
const testProject = "TestProject";
|
|
|
|
runtime._setProject(testProject);
|
|
|
|
const testStack = "TestStack";
|
|
|
|
runtime._setStack(testStack);
|
|
|
|
try {
|
|
|
|
// Allocating a resource directly while in test mode succeeds.
|
|
|
|
let res: FakeResource | undefined;
|
|
|
|
assert.doesNotThrow(() => { res = new FakeResource("fake", { x: 42 }); });
|
|
|
|
const x = await new Promise((resolve) => res!.x!.apply(resolve));
|
2020-10-21 19:21:47 +02:00
|
|
|
assert.strictEqual(x, 42);
|
2020-10-01 21:31:52 +02:00
|
|
|
// Fetching the project name while in test mode succeeds.
|
|
|
|
let project: string | undefined;
|
|
|
|
assert.doesNotThrow(() => { project = runtime.getProject(); });
|
2020-10-21 19:21:47 +02:00
|
|
|
assert.strictEqual(project, testProject);
|
2020-10-01 21:31:52 +02:00
|
|
|
// Fetching the stack name while in test mode succeeds.
|
|
|
|
let stack: string | undefined;
|
|
|
|
assert.doesNotThrow(() => { stack = runtime.getStack(); });
|
2020-10-21 19:21:47 +02:00
|
|
|
assert.strictEqual(stack, testStack);
|
2020-10-01 21:31:52 +02:00
|
|
|
} finally {
|
|
|
|
runtime._setTestModeEnabled(false);
|
|
|
|
runtime._setProject("");
|
|
|
|
runtime._setStack("");
|
|
|
|
}
|
|
|
|
}));
|
2019-04-17 07:20:01 +02:00
|
|
|
});
|