in src/eventSubscription/commands/mock/createMockEventGenerator.ts [27:117]
export async function createMockEventGenerator(actionContext: IActionContext, node?: EventSubscriptionTreeItem): Promise<void> {
let eventType: string;
let topic: string;
let destination: {};
let fileName: string;
if (node) {
eventType = getEventTypeFromTopic(node.topic);
topic = node.topic;
destination = {
eventSubscriptionId: node.id
};
fileName = node.label;
} else {
eventType = await promptForEventType();
topic = '/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testgroup/providers/Microsoft.Provider/namespaces/testresource';
const urlContext: IEndpointUrlWizardContext = {};
const urlStep: EndpointUrlStep<IEndpointUrlWizardContext> = new EndpointUrlStep();
await urlStep.prompt(urlContext);
destination = {
endpointUrl: urlContext.endpointUrl
};
fileName = 'test';
}
actionContext.properties.eventType = eventType;
let schemaFileName: string | undefined;
let eventSubTypePattern: string;
let subjectPattern: string;
switch (eventType) {
case EventType.Storage:
schemaFileName = 'Storage';
eventSubTypePattern = 'Blob(Created|Deleted)';
subjectPattern = '/blobServices/default/containers/[a-zA-Z0-9]+/blobs/[a-zA-Z0-9]+';
break;
case EventType.Resources:
schemaFileName = 'Resource';
eventSubTypePattern = 'Resource(Write|Delete)(Success|Failure|Cancel)';
subjectPattern = '/subscriptions\/[a-zA-Z0-9]+\/resourceGroups\/[a-zA-Z0-9]+\/providers\/Microsoft\\.[a-zA-Z0-9]+\/[a-zA-Z0-9]+';
break;
case EventType.ContainerRegistry:
schemaFileName = 'ContainerRegistry';
eventSubTypePattern = 'Image(Pushed|Deleted)';
subjectPattern = '[a-zA-Z0-9]+:[0-9]\\.[0-9]\\.[0-9]';
break;
case EventType.Devices:
schemaFileName = 'IotHub';
eventSubTypePattern = 'Device(Created|Deleted)';
subjectPattern = 'devices/[a-zA-Z0-9]+';
break;
case EventType.EventHub:
schemaFileName = 'EventHub';
eventSubTypePattern = 'CaptureFileCreated';
// Get the event hub name from the topic id and use that as the subject
subjectPattern = topic.substring(topic.lastIndexOf('/') + 1);
break;
case EventType.Custom:
eventSubTypePattern = '[a-zA-Z0-9]+';
subjectPattern = '[a-zA-Z0-9]+';
break;
default:
throw new RangeError();
}
const templatesPath: string = ext.context.asAbsolutePath(path.join('resources', 'templates'));
const eventSchema: IEventSchema = <IEventSchema>await fse.readJson(path.join(templatesPath, 'Event.json'));
if (schemaFileName) {
eventSchema.properties.data = <{}>await fse.readJson(path.join(templatesPath, `${schemaFileName}.json`));
}
eventSchema.properties.topic.default = topic;
eventSchema.properties.eventType.pattern = `${eventType.replace('.', '\\.')}\\.${eventSubTypePattern}`;
eventSchema.properties.subject.pattern = subjectPattern;
const definitionsPath: string = path.join(templatesPath, 'definitions', `${schemaFileName}.json`);
if (await fse.pathExists(definitionsPath)) {
eventSchema.definitions = <{}>await fse.readJson(definitionsPath);
}
const eventGenerator: IMockEventGenerator = {
destination: destination,
numberOfEvents: 1,
jsonSchemaFakerOptions: {
useDefaultValue: true,
alwaysFakeOptionals: true
},
schema: eventSchema
};
await fsUtils.showNewFile(JSON.stringify(eventGenerator, undefined, 2), fileName, '.eventGenerator.json');
}