Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions packages/@aws-cdk/aws-appmesh/lib/virtual-node.ts
Original file line number Diff line number Diff line change
Expand Up @@ -208,6 +208,10 @@ export class VirtualNode extends VirtualNodeBase {
* Utility method to add an inbound listener for this VirtualNode
*/
public addListener(listener: VirtualNodeListener) {
if (this.listeners.length >= 1) {
// @see https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appmesh-virtualnode-virtualnodespec.html#cfn-appmesh-virtualnode-virtualnodespec-listeners
throw new Error('Cannot add `VirtualNodeListener`. Virtual Nodes support at most one listener at this time.');
}
this.listeners.push(listener.bind(this));
}

Expand Down
39 changes: 39 additions & 0 deletions packages/@aws-cdk/aws-appmesh/test/test.virtual-node.ts
Original file line number Diff line number Diff line change
Expand Up @@ -518,6 +518,7 @@ export = {

test.done();
},

'Can import Virtual Nodes using attributes'(test: Test) {
// GIVEN
const stack = new cdk.Stack();
Expand All @@ -534,4 +535,42 @@ export = {

test.done();
},

'Throws when more than one listener added'(test: Test) {
// GIVEN
const stack = new cdk.Stack();
const meshName = 'testMesh';

// WHEN
test.throws(() => {
new appmesh.VirtualNode(stack, 'VirtualNode', {
mesh: appmesh.Mesh.fromMeshName(stack, 'Mesh', meshName),
listeners: [
appmesh.VirtualNodeListener.http(),
appmesh.VirtualNodeListener.grpc(),
],
});
}, /at most one listener/i);

test.done();
},

'Throws when more than one listener added by addListener'(test: Test) {
// GIVEN
const stack = new cdk.Stack();
const meshName = 'testMesh';
const virtualNode = new appmesh.VirtualNode(stack, 'VirtualNode', {
mesh: appmesh.Mesh.fromMeshName(stack, 'Mesh', meshName),
listeners: [
appmesh.VirtualNodeListener.http(),
],
});

// WHEN
test.throws(() => {
virtualNode.addListener(appmesh.VirtualNodeListener.grpc());
}, /at most one listener/i);

test.done();
},
};