sparse-intern-71089
06/24/2020, 11:27 PMlittle-cartoon-10569
06/24/2020, 11:27 PMapply
on those properties, then I can see the resources in my test context (variables that I populate inside the newResource
callback in setMocks
). But I can't reliably see those resources in the context if I apply on other things (e.g. RouteTables or NACLs). If there's a way to avoid creating properties just for testing, I'd be interested.white-balloon-205
little-cartoon-10569
06/25/2020, 9:34 PMthis.isolatedNacl = new aws.ec2.NetworkAcl(name, {
vpcId: this.vpc.id,
subnetIds: this.vpc.isolatedSubnetIds
}, this.parentOpts(this));
new aws.ec2.NetworkAclRule(name}, {
ruleNumber: 200,
ruleAction: "allow", protocol: "-1",
networkAclId: this.isolatedNacl.id,
cidrBlock: this.publicSubnet.subnet.cidrBlock
}, opts);
The NACL rule isn't interesting to my app, it just needs to be created.
In the test for my ComponentResource, I want to ensure that the CIDR block of my isolatedNacl's only rule is the same as the CIDR block of the public subnet. I have a this.publicSubnet.subnet.cidrBlock
that I can apply
on, all good. But I don't have anything to apply
to get the rule's CIDR block. So, I was trying to use the stub code in my Mocha test to get it.
let isolatedRuleCidrBlock: CidrBlock; // This is within my outermost "describe" function
pulumi.runtime.setMocks({
newResource: function (type: string, name: string, inputs: any): { id: string, state: any } {
let state = { name: name, ...inputs };
if (type == 'aws:ec2/networkAclRule:NetworkAclRule') { isolatedRuleCidrBlock = state; } // Remember the rule for later
return {
id: `${name}_id`,
state: state,
};
},
call: (token: string, args: any, provider?: string) => {
switch (token) {
case "aws:index/getAvailabilityZones:getAvailabilityZones":
return {
names: ["ap-southeast-2a", "ap-southeast-2b"],
zoneIds: ["southeast2a", "southeast2b"],
};
}
return args;
},
});
Then my test can be something like:
it('should allow access to the isolated subnets from the public subnet', async function check_isolated_public_access() {
pulumi.output(objectUnderTest.publicSubnet.subnet.cidrBlock).apply((subnetCidr)) => {
expect(subnetCidir).to.eql(isolatedRuleCidrBlock);
}
little-cartoon-10569
06/25/2020, 9:41 PMpulumi.all()
at the same time as my subnet CIDR block). This is working, but it's more app code than I need...little-cartoon-10569
06/25/2020, 9:44 PMnewResource
function, but it's not there at the right time: my test can't see it. The Pulumi engine creates it correctly, my test is just running too soon because it hasn't run apply
on the right thing.No matter how you like to participate in developer communities, Pulumi wants to meet you there. If you want to meet other Pulumi users to share use-cases and best practices, contribute code or documentation, see us at an event, or just tell a story about something cool you did with Pulumi, you are part of our community.
Powered by