@microsoft/terraform-cdk-constructs 1.7.1 → 1.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.jsii +46476 -27231
- package/API.md +68443 -28286
- package/lib/azure-actiongroup/lib/action-group.js +1 -1
- package/lib/azure-activitylogalert/lib/activity-log-alert.js +1 -1
- package/lib/azure-aks/lib/aks-cluster.js +1 -1
- package/lib/azure-diagnosticsettings/lib/diagnostic-settings.js +1 -1
- package/lib/azure-dnsforwardingruleset/lib/dns-forwarding-ruleset.js +1 -1
- package/lib/azure-dnsforwardingruleset/lib/forwarding-rule.js +1 -1
- package/lib/azure-dnsforwardingruleset/lib/virtual-network-link.js +1 -1
- package/lib/azure-dnsresolver/lib/dns-resolver.js +1 -1
- package/lib/azure-dnsresolver/lib/inbound-endpoint.js +1 -1
- package/lib/azure-dnsresolver/lib/outbound-endpoint.js +1 -1
- package/lib/azure-dnszone/lib/dns-zone.js +1 -1
- package/lib/azure-dnszone/lib/index.d.ts +1 -0
- package/lib/azure-dnszone/lib/index.js +2 -1
- package/lib/azure-dnszone/lib/records/dns-record-schemas.d.ts +68 -0
- package/lib/azure-dnszone/lib/records/dns-record-schemas.js +813 -0
- package/lib/azure-dnszone/lib/records/dns-records.d.ts +688 -0
- package/lib/azure-dnszone/lib/records/dns-records.js +924 -0
- package/lib/azure-dnszone/lib/records/index.d.ts +19 -0
- package/lib/azure-dnszone/lib/records/index.js +38 -0
- package/lib/azure-dnszone/test/dns-records.integ.d.ts +21 -0
- package/lib/azure-dnszone/test/dns-records.integ.js +321 -0
- package/lib/azure-dnszone/test/dns-records.spec.d.ts +20 -0
- package/lib/azure-dnszone/test/dns-records.spec.js +950 -0
- package/lib/azure-loganalyticsworkspace/index.d.ts +6 -0
- package/lib/azure-loganalyticsworkspace/index.js +23 -0
- package/lib/azure-loganalyticsworkspace/lib/index.d.ts +5 -0
- package/lib/azure-loganalyticsworkspace/lib/index.js +22 -0
- package/lib/azure-loganalyticsworkspace/lib/log-analytics-workspace-schemas.d.ts +51 -0
- package/lib/azure-loganalyticsworkspace/lib/log-analytics-workspace-schemas.js +255 -0
- package/lib/azure-loganalyticsworkspace/lib/log-analytics-workspace.d.ts +301 -0
- package/lib/azure-loganalyticsworkspace/lib/log-analytics-workspace.js +213 -0
- package/lib/azure-loganalyticsworkspace/test/log-analytics-workspace.integ.d.ts +9 -0
- package/lib/azure-loganalyticsworkspace/test/log-analytics-workspace.integ.js +71 -0
- package/lib/azure-loganalyticsworkspace/test/log-analytics-workspace.spec.d.ts +8 -0
- package/lib/azure-loganalyticsworkspace/test/log-analytics-workspace.spec.js +504 -0
- package/lib/azure-metricalert/lib/metric-alert.js +1 -1
- package/lib/azure-networkinterface/lib/network-interface.js +1 -1
- package/lib/azure-networksecuritygroup/lib/network-security-group.js +1 -1
- package/lib/azure-networkwatcher/index.d.ts +14 -0
- package/lib/azure-networkwatcher/index.js +31 -0
- package/lib/azure-networkwatcher/lib/index.d.ts +5 -0
- package/lib/azure-networkwatcher/lib/index.js +22 -0
- package/lib/azure-networkwatcher/lib/network-watcher-schemas.d.ts +47 -0
- package/lib/azure-networkwatcher/lib/network-watcher-schemas.js +167 -0
- package/lib/azure-networkwatcher/lib/network-watcher.d.ts +181 -0
- package/lib/azure-networkwatcher/lib/network-watcher.js +187 -0
- package/lib/azure-networkwatcher/test/network-watcher.integ.d.ts +12 -0
- package/lib/azure-networkwatcher/test/network-watcher.integ.js +84 -0
- package/lib/azure-networkwatcher/test/network-watcher.spec.d.ts +8 -0
- package/lib/azure-networkwatcher/test/network-watcher.spec.js +312 -0
- package/lib/azure-policyassignment/lib/policy-assignment.js +1 -1
- package/lib/azure-policydefinition/lib/policy-definition.js +1 -1
- package/lib/azure-policysetdefinition/index.d.ts +10 -0
- package/lib/azure-policysetdefinition/index.js +27 -0
- package/lib/azure-policysetdefinition/lib/index.d.ts +5 -0
- package/lib/azure-policysetdefinition/lib/index.js +22 -0
- package/lib/azure-policysetdefinition/lib/policy-set-definition-schemas.d.ts +50 -0
- package/lib/azure-policysetdefinition/lib/policy-set-definition-schemas.js +255 -0
- package/lib/azure-policysetdefinition/lib/policy-set-definition.d.ts +426 -0
- package/lib/azure-policysetdefinition/lib/policy-set-definition.js +255 -0
- package/lib/azure-policysetdefinition/test/policy-set-definition.integ.d.ts +9 -0
- package/lib/azure-policysetdefinition/test/policy-set-definition.integ.js +56 -0
- package/lib/azure-policysetdefinition/test/policy-set-definition.spec.d.ts +8 -0
- package/lib/azure-policysetdefinition/test/policy-set-definition.spec.js +745 -0
- package/lib/azure-privatednszone/lib/index.d.ts +1 -0
- package/lib/azure-privatednszone/lib/index.js +2 -1
- package/lib/azure-privatednszone/lib/private-dns-zone.d.ts +0 -2
- package/lib/azure-privatednszone/lib/private-dns-zone.js +6 -13
- package/lib/azure-privatednszone/lib/records/index.d.ts +7 -0
- package/lib/azure-privatednszone/lib/records/index.js +26 -0
- package/lib/azure-privatednszone/lib/records/private-dns-record-schemas.d.ts +52 -0
- package/lib/azure-privatednszone/lib/records/private-dns-record-schemas.js +683 -0
- package/lib/azure-privatednszone/lib/records/private-dns-records.d.ts +523 -0
- package/lib/azure-privatednszone/lib/records/private-dns-records.js +739 -0
- package/lib/azure-privatednszone/test/private-dns-records.integ.d.ts +19 -0
- package/lib/azure-privatednszone/test/private-dns-records.integ.js +245 -0
- package/lib/azure-privatednszone/test/private-dns-records.spec.d.ts +18 -0
- package/lib/azure-privatednszone/test/private-dns-records.spec.js +756 -0
- package/lib/azure-privatednszone/test/private-dns-zone.spec.js +5 -5
- package/lib/azure-privatednszonelink/lib/private-dns-zone-link.js +1 -1
- package/lib/azure-publicipaddress/lib/public-ip-address.js +1 -1
- package/lib/azure-resourcegroup/lib/resource-group.js +1 -1
- package/lib/azure-roleassignment/lib/role-assignment.js +1 -1
- package/lib/azure-roledefinition/lib/role-definition.js +1 -1
- package/lib/azure-storageaccount/lib/storage-account.js +1 -1
- package/lib/azure-subnet/lib/subnet.js +1 -1
- package/lib/azure-virtualmachine/lib/virtual-machine.js +1 -1
- package/lib/azure-virtualnetwork/lib/virtual-network.js +1 -1
- package/lib/azure-virtualnetworkgateway/lib/virtual-network-gateway-schemas.js +2 -2
- package/lib/azure-virtualnetworkgateway/lib/virtual-network-gateway.d.ts +4 -2
- package/lib/azure-virtualnetworkgateway/lib/virtual-network-gateway.js +8 -5
- package/lib/azure-virtualnetworkgateway/test/virtual-network-gateway.spec.js +109 -1
- package/lib/azure-virtualnetworkgatewayconnection/lib/virtual-network-gateway-connection.js +1 -1
- package/lib/azure-virtualnetworkmanager/lib/connectivity-configuration.js +1 -1
- package/lib/azure-virtualnetworkmanager/lib/ipam-pool-static-cidr.js +1 -1
- package/lib/azure-virtualnetworkmanager/lib/ipam-pool.js +1 -1
- package/lib/azure-virtualnetworkmanager/lib/network-group-static-member.js +1 -1
- package/lib/azure-virtualnetworkmanager/lib/network-group.js +1 -1
- package/lib/azure-virtualnetworkmanager/lib/security-admin-configuration.js +1 -1
- package/lib/azure-virtualnetworkmanager/lib/security-admin-rule-collection.js +1 -1
- package/lib/azure-virtualnetworkmanager/lib/security-admin-rule.js +1 -1
- package/lib/azure-virtualnetworkmanager/lib/virtual-network-manager.js +1 -1
- package/lib/azure-vmss/lib/virtual-machine-scale-set.js +1 -1
- package/lib/core-azure/lib/azapi/azapi-resource.js +4 -4
- package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-client-config/index.js +2 -2
- package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-resource/index.js +5 -5
- package/lib/core-azure/lib/azapi/providers-azapi/provider/index.js +1 -1
- package/lib/core-azure/lib/azapi/providers-azapi/resource/index.js +5 -5
- package/lib/core-azure/lib/azapi/providers-azapi/resource-action/index.js +3 -3
- package/lib/core-azure/lib/azapi/providers-azapi/update-resource/index.js +3 -3
- package/lib/core-azure/lib/azapi/schema-mapper/schema-mapper.js +1 -1
- package/lib/core-azure/lib/version-manager/api-version-manager.js +1 -1
- package/lib/core-azure/lib/version-manager/interfaces/version-interfaces.js +7 -7
- package/lib/index.d.ts +23 -0
- package/lib/index.js +25 -2
- package/lib/testing/index.js +2 -2
- package/lib/testing/lib/cleanup.js +1 -1
- package/lib/testing/lib/metadata.js +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var _a;
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.NetworkWatcher = void 0;
|
|
5
|
+
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
6
|
+
/**
|
|
7
|
+
* Unified Azure Network Watcher implementation using AzapiResource framework
|
|
8
|
+
*
|
|
9
|
+
* This class provides a version-aware implementation for Azure Network Watcher
|
|
10
|
+
* that automatically handles version management, schema validation, and property
|
|
11
|
+
* transformation across all supported API versions.
|
|
12
|
+
*
|
|
13
|
+
* IMPORTANT: Azure only allows one Network Watcher per subscription per region.
|
|
14
|
+
* If you attempt to create a Network Watcher in a region where one already exists,
|
|
15
|
+
* the deployment will fail.
|
|
16
|
+
*
|
|
17
|
+
* Supported API Versions:
|
|
18
|
+
* - 2024-01-01 (Active, Latest)
|
|
19
|
+
* - 2023-11-01 (Active, Backward Compatibility)
|
|
20
|
+
*
|
|
21
|
+
* Features:
|
|
22
|
+
* - Automatic latest version resolution when no version is specified
|
|
23
|
+
* - Explicit version pinning for stability requirements
|
|
24
|
+
* - Schema-driven validation and transformation
|
|
25
|
+
* - Full JSII compliance for multi-language support
|
|
26
|
+
*
|
|
27
|
+
* Network Watcher is primarily used as a dependency for other Network Watcher features:
|
|
28
|
+
* - Flow Logs
|
|
29
|
+
* - Connection Monitor
|
|
30
|
+
* - Packet Capture
|
|
31
|
+
* - Network Diagnostic Tools
|
|
32
|
+
*/
|
|
33
|
+
const cdktf = require("cdktf");
|
|
34
|
+
const network_watcher_schemas_1 = require("./network-watcher-schemas");
|
|
35
|
+
const azapi_resource_1 = require("../../core-azure/lib/azapi/azapi-resource");
|
|
36
|
+
/**
|
|
37
|
+
* Unified Azure Network Watcher implementation
|
|
38
|
+
*
|
|
39
|
+
* This class provides a single, version-aware implementation that automatically handles version
|
|
40
|
+
* resolution, schema validation, and property transformation while maintaining full JSII compliance.
|
|
41
|
+
*
|
|
42
|
+
* Network Watcher is a regional service that provides tools to monitor, diagnose, and gain
|
|
43
|
+
* insights into your network health and performance in Azure. It serves as the anchor for
|
|
44
|
+
* Network Watcher features like Flow Logs, Connection Monitor, and Packet Capture.
|
|
45
|
+
*
|
|
46
|
+
* IMPORTANT CONSTRAINT: Azure only allows one Network Watcher per subscription per region.
|
|
47
|
+
* If you need Network Watcher functionality in multiple regions, you must create a separate
|
|
48
|
+
* Network Watcher for each region.
|
|
49
|
+
*
|
|
50
|
+
* @example
|
|
51
|
+
* // Basic Network Watcher:
|
|
52
|
+
* const networkWatcher = new NetworkWatcher(this, "network-watcher", {
|
|
53
|
+
* name: "nw-eastus",
|
|
54
|
+
* location: "eastus",
|
|
55
|
+
* resourceGroupId: resourceGroup.id,
|
|
56
|
+
* });
|
|
57
|
+
*
|
|
58
|
+
* @example
|
|
59
|
+
* // Network Watcher with specific API version:
|
|
60
|
+
* const networkWatcher = new NetworkWatcher(this, "network-watcher", {
|
|
61
|
+
* name: "nw-westus2",
|
|
62
|
+
* location: "westus2",
|
|
63
|
+
* resourceGroupId: resourceGroup.id,
|
|
64
|
+
* apiVersion: "2024-01-01",
|
|
65
|
+
* tags: {
|
|
66
|
+
* environment: "production",
|
|
67
|
+
* },
|
|
68
|
+
* });
|
|
69
|
+
*
|
|
70
|
+
* @example
|
|
71
|
+
* // Network Watcher for use with Flow Logs:
|
|
72
|
+
* const networkWatcher = new NetworkWatcher(this, "network-watcher", {
|
|
73
|
+
* name: "NetworkWatcher_eastus",
|
|
74
|
+
* location: "eastus",
|
|
75
|
+
* resourceGroupId: networkWatcherRg.id,
|
|
76
|
+
* });
|
|
77
|
+
*
|
|
78
|
+
* // Then use it with NSG Flow Logs
|
|
79
|
+
* const flowLog = new NsgFlowLog(this, "flow-log", {
|
|
80
|
+
* networkWatcherId: networkWatcher.id,
|
|
81
|
+
* // ... other properties
|
|
82
|
+
* });
|
|
83
|
+
*
|
|
84
|
+
* @stability stable
|
|
85
|
+
*/
|
|
86
|
+
class NetworkWatcher extends azapi_resource_1.AzapiResource {
|
|
87
|
+
/**
|
|
88
|
+
* Creates a new Azure Network Watcher using the AzapiResource framework
|
|
89
|
+
*
|
|
90
|
+
* The constructor automatically handles version resolution, schema registration,
|
|
91
|
+
* validation, and resource creation.
|
|
92
|
+
*
|
|
93
|
+
* IMPORTANT: Azure only allows one Network Watcher per subscription per region.
|
|
94
|
+
* Attempting to create a Network Watcher in a region where one already exists
|
|
95
|
+
* will result in a deployment error.
|
|
96
|
+
*
|
|
97
|
+
* @param scope - The scope in which to define this construct
|
|
98
|
+
* @param id - The unique identifier for this instance
|
|
99
|
+
* @param props - Configuration properties for the Network Watcher
|
|
100
|
+
*/
|
|
101
|
+
constructor(scope, id, props) {
|
|
102
|
+
super(scope, id, props);
|
|
103
|
+
this.props = props;
|
|
104
|
+
// Create Terraform outputs for easy access and referencing from other resources
|
|
105
|
+
this.idOutput = new cdktf.TerraformOutput(this, "id", {
|
|
106
|
+
value: this.id,
|
|
107
|
+
description: "The ID of the Network Watcher",
|
|
108
|
+
});
|
|
109
|
+
this.nameOutput = new cdktf.TerraformOutput(this, "name", {
|
|
110
|
+
value: `\${${this.terraformResource.fqn}.name}`,
|
|
111
|
+
description: "The name of the Network Watcher",
|
|
112
|
+
});
|
|
113
|
+
this.locationOutput = new cdktf.TerraformOutput(this, "location", {
|
|
114
|
+
value: `\${${this.terraformResource.fqn}.output.location}`,
|
|
115
|
+
description: "The location of the Network Watcher",
|
|
116
|
+
});
|
|
117
|
+
this.provisioningStateOutput = new cdktf.TerraformOutput(this, "provisioning_state", {
|
|
118
|
+
value: `\${${this.terraformResource.fqn}.output.properties.provisioningState}`,
|
|
119
|
+
description: "The provisioning state of the Network Watcher",
|
|
120
|
+
});
|
|
121
|
+
// Override logical IDs
|
|
122
|
+
this.idOutput.overrideLogicalId("id");
|
|
123
|
+
this.nameOutput.overrideLogicalId("name");
|
|
124
|
+
this.locationOutput.overrideLogicalId("location");
|
|
125
|
+
this.provisioningStateOutput.overrideLogicalId("provisioning_state");
|
|
126
|
+
}
|
|
127
|
+
// =============================================================================
|
|
128
|
+
// REQUIRED ABSTRACT METHODS FROM AzapiResource
|
|
129
|
+
// =============================================================================
|
|
130
|
+
/**
|
|
131
|
+
* Gets the default API version to use when no explicit version is specified
|
|
132
|
+
* Returns the latest stable version as the default
|
|
133
|
+
*/
|
|
134
|
+
defaultVersion() {
|
|
135
|
+
return "2024-01-01";
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Gets the Azure resource type for Network Watcher
|
|
139
|
+
*/
|
|
140
|
+
resourceType() {
|
|
141
|
+
return network_watcher_schemas_1.NETWORK_WATCHER_TYPE;
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Gets the API schema for the resolved version
|
|
145
|
+
* Uses the framework's schema resolution to get the appropriate schema
|
|
146
|
+
*/
|
|
147
|
+
apiSchema() {
|
|
148
|
+
return this.resolveSchema();
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Indicates that this resource type requires a location
|
|
152
|
+
*/
|
|
153
|
+
requiresLocation() {
|
|
154
|
+
return true;
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Creates the resource body for the Azure API call
|
|
158
|
+
*
|
|
159
|
+
* Network Watcher is a simple resource with an empty properties block.
|
|
160
|
+
* All configuration is handled at the resource level (name, location, tags).
|
|
161
|
+
*/
|
|
162
|
+
createResourceBody(_props) {
|
|
163
|
+
// Network Watcher has an empty properties block
|
|
164
|
+
// The resource is configured primarily through name, location, and tags
|
|
165
|
+
const body = {
|
|
166
|
+
properties: {},
|
|
167
|
+
};
|
|
168
|
+
return body;
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Resolves the parent resource ID for Network Watcher
|
|
172
|
+
* Network Watcher is a top-level resource within a resource group
|
|
173
|
+
*
|
|
174
|
+
* @param props - The resource properties
|
|
175
|
+
* @returns The parent resource ID (the resource group)
|
|
176
|
+
*/
|
|
177
|
+
resolveParentId(props) {
|
|
178
|
+
return props.resourceGroupId;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
exports.NetworkWatcher = NetworkWatcher;
|
|
182
|
+
_a = JSII_RTTI_SYMBOL_1;
|
|
183
|
+
NetworkWatcher[_a] = { fqn: "@microsoft/terraform-cdk-constructs.NetworkWatcher", version: "1.9.0" };
|
|
184
|
+
(() => {
|
|
185
|
+
azapi_resource_1.AzapiResource.registerSchemas(network_watcher_schemas_1.NETWORK_WATCHER_TYPE, network_watcher_schemas_1.ALL_NETWORK_WATCHER_VERSIONS);
|
|
186
|
+
})();
|
|
187
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV0d29yay13YXRjaGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2F6dXJlLW5ldHdvcmt3YXRjaGVyL2xpYi9uZXR3b3JrLXdhdGNoZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EwQkc7QUFFSCwrQkFBK0I7QUFFL0IsdUVBR21DO0FBQ25DLDhFQUdtRDtBQWlDbkQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpREc7QUFDSCxNQUFhLGNBQWUsU0FBUSw4QkFBYTtJQWtDL0M7Ozs7Ozs7Ozs7Ozs7T0FhRztJQUNILFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBMEI7UUFDbEUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFeEIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFFbkIsZ0ZBQWdGO1FBQ2hGLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxLQUFLLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUU7WUFDcEQsS0FBSyxFQUFFLElBQUksQ0FBQyxFQUFFO1lBQ2QsV0FBVyxFQUFFLCtCQUErQjtTQUM3QyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksS0FBSyxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFO1lBQ3hELEtBQUssRUFBRSxNQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLFFBQVE7WUFDL0MsV0FBVyxFQUFFLGlDQUFpQztTQUMvQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksS0FBSyxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFO1lBQ2hFLEtBQUssRUFBRSxNQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLG1CQUFtQjtZQUMxRCxXQUFXLEVBQUUscUNBQXFDO1NBQ25ELENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyx1QkFBdUIsR0FBRyxJQUFJLEtBQUssQ0FBQyxlQUFlLENBQ3RELElBQUksRUFDSixvQkFBb0IsRUFDcEI7WUFDRSxLQUFLLEVBQUUsTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyx1Q0FBdUM7WUFDOUUsV0FBVyxFQUFFLCtDQUErQztTQUM3RCxDQUNGLENBQUM7UUFFRix1QkFBdUI7UUFDdkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0QyxJQUFJLENBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzFDLElBQUksQ0FBQyxjQUFjLENBQUMsaUJBQWlCLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDbEQsSUFBSSxDQUFDLHVCQUF1QixDQUFDLGlCQUFpQixDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFDdkUsQ0FBQztJQUVELGdGQUFnRjtJQUNoRiwrQ0FBK0M7SUFDL0MsZ0ZBQWdGO0lBRWhGOzs7T0FHRztJQUNPLGNBQWM7UUFDdEIsT0FBTyxZQUFZLENBQUM7SUFDdEIsQ0FBQztJQUVEOztPQUVHO0lBQ08sWUFBWTtRQUNwQixPQUFPLDhDQUFvQixDQUFDO0lBQzlCLENBQUM7SUFFRDs7O09BR0c7SUFDTyxTQUFTO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFFRDs7T0FFRztJQUNPLGdCQUFnQjtRQUN4QixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNPLGtCQUFrQixDQUFDLE1BQVc7UUFDdEMsZ0RBQWdEO1FBQ2hELHdFQUF3RTtRQUN4RSxNQUFNLElBQUksR0FBUTtZQUNoQixVQUFVLEVBQUUsRUFBRTtTQUNmLENBQUM7UUFFRixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDTyxlQUFlLENBQUMsS0FBVTtRQUNsQyxPQUFRLEtBQTZCLENBQUMsZUFBZSxDQUFDO0lBQ3hELENBQUM7O0FBaEpILHdDQWlKQzs7O0FBaEpDO0lBQ0UsOEJBQWEsQ0FBQyxlQUFlLENBQzNCLDhDQUFvQixFQUNwQixzREFBNEIsQ0FDN0IsQ0FBQztBQUNKLENBQUMsR0FBQSxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBVbmlmaWVkIEF6dXJlIE5ldHdvcmsgV2F0Y2hlciBpbXBsZW1lbnRhdGlvbiB1c2luZyBBemFwaVJlc291cmNlIGZyYW1ld29ya1xuICpcbiAqIFRoaXMgY2xhc3MgcHJvdmlkZXMgYSB2ZXJzaW9uLWF3YXJlIGltcGxlbWVudGF0aW9uIGZvciBBenVyZSBOZXR3b3JrIFdhdGNoZXJcbiAqIHRoYXQgYXV0b21hdGljYWxseSBoYW5kbGVzIHZlcnNpb24gbWFuYWdlbWVudCwgc2NoZW1hIHZhbGlkYXRpb24sIGFuZCBwcm9wZXJ0eVxuICogdHJhbnNmb3JtYXRpb24gYWNyb3NzIGFsbCBzdXBwb3J0ZWQgQVBJIHZlcnNpb25zLlxuICpcbiAqIElNUE9SVEFOVDogQXp1cmUgb25seSBhbGxvd3Mgb25lIE5ldHdvcmsgV2F0Y2hlciBwZXIgc3Vic2NyaXB0aW9uIHBlciByZWdpb24uXG4gKiBJZiB5b3UgYXR0ZW1wdCB0byBjcmVhdGUgYSBOZXR3b3JrIFdhdGNoZXIgaW4gYSByZWdpb24gd2hlcmUgb25lIGFscmVhZHkgZXhpc3RzLFxuICogdGhlIGRlcGxveW1lbnQgd2lsbCBmYWlsLlxuICpcbiAqIFN1cHBvcnRlZCBBUEkgVmVyc2lvbnM6XG4gKiAtIDIwMjQtMDEtMDEgKEFjdGl2ZSwgTGF0ZXN0KVxuICogLSAyMDIzLTExLTAxIChBY3RpdmUsIEJhY2t3YXJkIENvbXBhdGliaWxpdHkpXG4gKlxuICogRmVhdHVyZXM6XG4gKiAtIEF1dG9tYXRpYyBsYXRlc3QgdmVyc2lvbiByZXNvbHV0aW9uIHdoZW4gbm8gdmVyc2lvbiBpcyBzcGVjaWZpZWRcbiAqIC0gRXhwbGljaXQgdmVyc2lvbiBwaW5uaW5nIGZvciBzdGFiaWxpdHkgcmVxdWlyZW1lbnRzXG4gKiAtIFNjaGVtYS1kcml2ZW4gdmFsaWRhdGlvbiBhbmQgdHJhbnNmb3JtYXRpb25cbiAqIC0gRnVsbCBKU0lJIGNvbXBsaWFuY2UgZm9yIG11bHRpLWxhbmd1YWdlIHN1cHBvcnRcbiAqXG4gKiBOZXR3b3JrIFdhdGNoZXIgaXMgcHJpbWFyaWx5IHVzZWQgYXMgYSBkZXBlbmRlbmN5IGZvciBvdGhlciBOZXR3b3JrIFdhdGNoZXIgZmVhdHVyZXM6XG4gKiAtIEZsb3cgTG9nc1xuICogLSBDb25uZWN0aW9uIE1vbml0b3JcbiAqIC0gUGFja2V0IENhcHR1cmVcbiAqIC0gTmV0d29yayBEaWFnbm9zdGljIFRvb2xzXG4gKi9cblxuaW1wb3J0ICogYXMgY2RrdGYgZnJvbSBcImNka3RmXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHtcbiAgQUxMX05FVFdPUktfV0FUQ0hFUl9WRVJTSU9OUyxcbiAgTkVUV09SS19XQVRDSEVSX1RZUEUsXG59IGZyb20gXCIuL25ldHdvcmstd2F0Y2hlci1zY2hlbWFzXCI7XG5pbXBvcnQge1xuICBBemFwaVJlc291cmNlLFxuICBBemFwaVJlc291cmNlUHJvcHMsXG59IGZyb20gXCIuLi8uLi9jb3JlLWF6dXJlL2xpYi9hemFwaS9hemFwaS1yZXNvdXJjZVwiO1xuaW1wb3J0IHsgQXBpU2NoZW1hIH0gZnJvbSBcIi4uLy4uL2NvcmUtYXp1cmUvbGliL3ZlcnNpb24tbWFuYWdlci9pbnRlcmZhY2VzL3ZlcnNpb24taW50ZXJmYWNlc1wiO1xuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIHRoZSB1bmlmaWVkIEF6dXJlIE5ldHdvcmsgV2F0Y2hlclxuICpcbiAqIEV4dGVuZHMgQXphcGlSZXNvdXJjZVByb3BzIHdpdGggTmV0d29yayBXYXRjaGVyIHNwZWNpZmljIHByb3BlcnRpZXMuXG4gKlxuICogSU1QT1JUQU5UOiBBenVyZSBvbmx5IGFsbG93cyBvbmUgTmV0d29yayBXYXRjaGVyIHBlciBzdWJzY3JpcHRpb24gcGVyIHJlZ2lvbi5cbiAqIEF0dGVtcHRpbmcgdG8gY3JlYXRlIG11bHRpcGxlIE5ldHdvcmsgV2F0Y2hlcnMgaW4gdGhlIHNhbWUgcmVnaW9uIHdpbGwgZmFpbC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOZXR3b3JrV2F0Y2hlclByb3BzIGV4dGVuZHMgQXphcGlSZXNvdXJjZVByb3BzIHtcbiAgLyoqXG4gICAqIFJlc291cmNlIEdyb3VwIElEIHdoZXJlIHRoZSBOZXR3b3JrIFdhdGNoZXIgd2lsbCBiZSBjcmVhdGVkXG4gICAqXG4gICAqIFRoZSBOZXR3b3JrIFdhdGNoZXIgd2lsbCBiZSBjcmVhdGVkIGFzIGEgY2hpbGQgb2YgdGhpcyByZXNvdXJjZSBncm91cC5cbiAgICogSXQncyByZWNvbW1lbmRlZCB0byB1c2UgYSBkZWRpY2F0ZWQgcmVzb3VyY2UgZ3JvdXAgZm9yIE5ldHdvcmsgV2F0Y2hlcnMsXG4gICAqIGFzIEF6dXJlIGF1dG9tYXRpY2FsbHkgY3JlYXRlcyBvbmUgbmFtZWQgXCJOZXR3b3JrV2F0Y2hlclJHXCIgd2hlbiBjZXJ0YWluXG4gICAqIG5ldHdvcmsgZmVhdHVyZXMgYXJlIHVzZWQuXG4gICAqL1xuICByZWFkb25seSByZXNvdXJjZUdyb3VwSWQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGUgcmVzb3VyY2UgYm9keSBpbnRlcmZhY2UgZm9yIEF6dXJlIE5ldHdvcmsgV2F0Y2hlciBBUEkgY2FsbHNcbiAqXG4gKiBOZXR3b3JrIFdhdGNoZXIgaXMgYSBzaW1wbGUgcmVzb3VyY2Ugd2l0aCBtaW5pbWFsIHByb3BlcnRpZXMuXG4gKiBUaGUgcHJvcGVydGllcyBibG9jayBpcyB0eXBpY2FsbHkgZW1wdHkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTmV0d29ya1dhdGNoZXJCb2R5IHtcbiAgcmVhZG9ubHkgcHJvcGVydGllczogeyBba2V5OiBzdHJpbmddOiBhbnkgfTtcbn1cblxuLyoqXG4gKiBVbmlmaWVkIEF6dXJlIE5ldHdvcmsgV2F0Y2hlciBpbXBsZW1lbnRhdGlvblxuICpcbiAqIFRoaXMgY2xhc3MgcHJvdmlkZXMgYSBzaW5nbGUsIHZlcnNpb24tYXdhcmUgaW1wbGVtZW50YXRpb24gdGhhdCBhdXRvbWF0aWNhbGx5IGhhbmRsZXMgdmVyc2lvblxuICogcmVzb2x1dGlvbiwgc2NoZW1hIHZhbGlkYXRpb24sIGFuZCBwcm9wZXJ0eSB0cmFuc2Zvcm1hdGlvbiB3aGlsZSBtYWludGFpbmluZyBmdWxsIEpTSUkgY29tcGxpYW5jZS5cbiAqXG4gKiBOZXR3b3JrIFdhdGNoZXIgaXMgYSByZWdpb25hbCBzZXJ2aWNlIHRoYXQgcHJvdmlkZXMgdG9vbHMgdG8gbW9uaXRvciwgZGlhZ25vc2UsIGFuZCBnYWluXG4gKiBpbnNpZ2h0cyBpbnRvIHlvdXIgbmV0d29yayBoZWFsdGggYW5kIHBlcmZvcm1hbmNlIGluIEF6dXJlLiBJdCBzZXJ2ZXMgYXMgdGhlIGFuY2hvciBmb3JcbiAqIE5ldHdvcmsgV2F0Y2hlciBmZWF0dXJlcyBsaWtlIEZsb3cgTG9ncywgQ29ubmVjdGlvbiBNb25pdG9yLCBhbmQgUGFja2V0IENhcHR1cmUuXG4gKlxuICogSU1QT1JUQU5UIENPTlNUUkFJTlQ6IEF6dXJlIG9ubHkgYWxsb3dzIG9uZSBOZXR3b3JrIFdhdGNoZXIgcGVyIHN1YnNjcmlwdGlvbiBwZXIgcmVnaW9uLlxuICogSWYgeW91IG5lZWQgTmV0d29yayBXYXRjaGVyIGZ1bmN0aW9uYWxpdHkgaW4gbXVsdGlwbGUgcmVnaW9ucywgeW91IG11c3QgY3JlYXRlIGEgc2VwYXJhdGVcbiAqIE5ldHdvcmsgV2F0Y2hlciBmb3IgZWFjaCByZWdpb24uXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEJhc2ljIE5ldHdvcmsgV2F0Y2hlcjpcbiAqIGNvbnN0IG5ldHdvcmtXYXRjaGVyID0gbmV3IE5ldHdvcmtXYXRjaGVyKHRoaXMsIFwibmV0d29yay13YXRjaGVyXCIsIHtcbiAqICAgbmFtZTogXCJudy1lYXN0dXNcIixcbiAqICAgbG9jYXRpb246IFwiZWFzdHVzXCIsXG4gKiAgIHJlc291cmNlR3JvdXBJZDogcmVzb3VyY2VHcm91cC5pZCxcbiAqIH0pO1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBOZXR3b3JrIFdhdGNoZXIgd2l0aCBzcGVjaWZpYyBBUEkgdmVyc2lvbjpcbiAqIGNvbnN0IG5ldHdvcmtXYXRjaGVyID0gbmV3IE5ldHdvcmtXYXRjaGVyKHRoaXMsIFwibmV0d29yay13YXRjaGVyXCIsIHtcbiAqICAgbmFtZTogXCJudy13ZXN0dXMyXCIsXG4gKiAgIGxvY2F0aW9uOiBcIndlc3R1czJcIixcbiAqICAgcmVzb3VyY2VHcm91cElkOiByZXNvdXJjZUdyb3VwLmlkLFxuICogICBhcGlWZXJzaW9uOiBcIjIwMjQtMDEtMDFcIixcbiAqICAgdGFnczoge1xuICogICAgIGVudmlyb25tZW50OiBcInByb2R1Y3Rpb25cIixcbiAqICAgfSxcbiAqIH0pO1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBOZXR3b3JrIFdhdGNoZXIgZm9yIHVzZSB3aXRoIEZsb3cgTG9nczpcbiAqIGNvbnN0IG5ldHdvcmtXYXRjaGVyID0gbmV3IE5ldHdvcmtXYXRjaGVyKHRoaXMsIFwibmV0d29yay13YXRjaGVyXCIsIHtcbiAqICAgbmFtZTogXCJOZXR3b3JrV2F0Y2hlcl9lYXN0dXNcIixcbiAqICAgbG9jYXRpb246IFwiZWFzdHVzXCIsXG4gKiAgIHJlc291cmNlR3JvdXBJZDogbmV0d29ya1dhdGNoZXJSZy5pZCxcbiAqIH0pO1xuICpcbiAqIC8vIFRoZW4gdXNlIGl0IHdpdGggTlNHIEZsb3cgTG9nc1xuICogY29uc3QgZmxvd0xvZyA9IG5ldyBOc2dGbG93TG9nKHRoaXMsIFwiZmxvdy1sb2dcIiwge1xuICogICBuZXR3b3JrV2F0Y2hlcklkOiBuZXR3b3JrV2F0Y2hlci5pZCxcbiAqICAgLy8gLi4uIG90aGVyIHByb3BlcnRpZXNcbiAqIH0pO1xuICpcbiAqIEBzdGFiaWxpdHkgc3RhYmxlXG4gKi9cbmV4cG9ydCBjbGFzcyBOZXR3b3JrV2F0Y2hlciBleHRlbmRzIEF6YXBpUmVzb3VyY2Uge1xuICBzdGF0aWMge1xuICAgIEF6YXBpUmVzb3VyY2UucmVnaXN0ZXJTY2hlbWFzKFxuICAgICAgTkVUV09SS19XQVRDSEVSX1RZUEUsXG4gICAgICBBTExfTkVUV09SS19XQVRDSEVSX1ZFUlNJT05TLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGlucHV0IHByb3BlcnRpZXMgZm9yIHRoaXMgTmV0d29yayBXYXRjaGVyIGluc3RhbmNlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcHJvcHM6IE5ldHdvcmtXYXRjaGVyUHJvcHM7XG5cbiAgLy8gT3V0cHV0IHByb3BlcnRpZXMgZm9yIGVhc3kgYWNjZXNzIGFuZCByZWZlcmVuY2luZ1xuICAvKipcbiAgICogVGVycmFmb3JtIG91dHB1dCBmb3IgdGhlIE5ldHdvcmsgV2F0Y2hlciByZXNvdXJjZSBJRFxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGlkT3V0cHV0OiBjZGt0Zi5UZXJyYWZvcm1PdXRwdXQ7XG5cbiAgLyoqXG4gICAqIFRlcnJhZm9ybSBvdXRwdXQgZm9yIHRoZSBOZXR3b3JrIFdhdGNoZXIgbmFtZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IG5hbWVPdXRwdXQ6IGNka3RmLlRlcnJhZm9ybU91dHB1dDtcblxuICAvKipcbiAgICogVGVycmFmb3JtIG91dHB1dCBmb3IgdGhlIE5ldHdvcmsgV2F0Y2hlciBsb2NhdGlvblxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGxvY2F0aW9uT3V0cHV0OiBjZGt0Zi5UZXJyYWZvcm1PdXRwdXQ7XG5cbiAgLyoqXG4gICAqIFRlcnJhZm9ybSBvdXRwdXQgZm9yIHRoZSBOZXR3b3JrIFdhdGNoZXIgcHJvdmlzaW9uaW5nIHN0YXRlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcHJvdmlzaW9uaW5nU3RhdGVPdXRwdXQ6IGNka3RmLlRlcnJhZm9ybU91dHB1dDtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBBenVyZSBOZXR3b3JrIFdhdGNoZXIgdXNpbmcgdGhlIEF6YXBpUmVzb3VyY2UgZnJhbWV3b3JrXG4gICAqXG4gICAqIFRoZSBjb25zdHJ1Y3RvciBhdXRvbWF0aWNhbGx5IGhhbmRsZXMgdmVyc2lvbiByZXNvbHV0aW9uLCBzY2hlbWEgcmVnaXN0cmF0aW9uLFxuICAgKiB2YWxpZGF0aW9uLCBhbmQgcmVzb3VyY2UgY3JlYXRpb24uXG4gICAqXG4gICAqIElNUE9SVEFOVDogQXp1cmUgb25seSBhbGxvd3Mgb25lIE5ldHdvcmsgV2F0Y2hlciBwZXIgc3Vic2NyaXB0aW9uIHBlciByZWdpb24uXG4gICAqIEF0dGVtcHRpbmcgdG8gY3JlYXRlIGEgTmV0d29yayBXYXRjaGVyIGluIGEgcmVnaW9uIHdoZXJlIG9uZSBhbHJlYWR5IGV4aXN0c1xuICAgKiB3aWxsIHJlc3VsdCBpbiBhIGRlcGxveW1lbnQgZXJyb3IuXG4gICAqXG4gICAqIEBwYXJhbSBzY29wZSAtIFRoZSBzY29wZSBpbiB3aGljaCB0byBkZWZpbmUgdGhpcyBjb25zdHJ1Y3RcbiAgICogQHBhcmFtIGlkIC0gVGhlIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGlzIGluc3RhbmNlXG4gICAqIEBwYXJhbSBwcm9wcyAtIENvbmZpZ3VyYXRpb24gcHJvcGVydGllcyBmb3IgdGhlIE5ldHdvcmsgV2F0Y2hlclxuICAgKi9cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IE5ldHdvcmtXYXRjaGVyUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHByb3BzKTtcblxuICAgIHRoaXMucHJvcHMgPSBwcm9wcztcblxuICAgIC8vIENyZWF0ZSBUZXJyYWZvcm0gb3V0cHV0cyBmb3IgZWFzeSBhY2Nlc3MgYW5kIHJlZmVyZW5jaW5nIGZyb20gb3RoZXIgcmVzb3VyY2VzXG4gICAgdGhpcy5pZE91dHB1dCA9IG5ldyBjZGt0Zi5UZXJyYWZvcm1PdXRwdXQodGhpcywgXCJpZFwiLCB7XG4gICAgICB2YWx1ZTogdGhpcy5pZCxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlRoZSBJRCBvZiB0aGUgTmV0d29yayBXYXRjaGVyXCIsXG4gICAgfSk7XG5cbiAgICB0aGlzLm5hbWVPdXRwdXQgPSBuZXcgY2RrdGYuVGVycmFmb3JtT3V0cHV0KHRoaXMsIFwibmFtZVwiLCB7XG4gICAgICB2YWx1ZTogYFxcJHske3RoaXMudGVycmFmb3JtUmVzb3VyY2UuZnFufS5uYW1lfWAsXG4gICAgICBkZXNjcmlwdGlvbjogXCJUaGUgbmFtZSBvZiB0aGUgTmV0d29yayBXYXRjaGVyXCIsXG4gICAgfSk7XG5cbiAgICB0aGlzLmxvY2F0aW9uT3V0cHV0ID0gbmV3IGNka3RmLlRlcnJhZm9ybU91dHB1dCh0aGlzLCBcImxvY2F0aW9uXCIsIHtcbiAgICAgIHZhbHVlOiBgXFwkeyR7dGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5mcW59Lm91dHB1dC5sb2NhdGlvbn1gLFxuICAgICAgZGVzY3JpcHRpb246IFwiVGhlIGxvY2F0aW9uIG9mIHRoZSBOZXR3b3JrIFdhdGNoZXJcIixcbiAgICB9KTtcblxuICAgIHRoaXMucHJvdmlzaW9uaW5nU3RhdGVPdXRwdXQgPSBuZXcgY2RrdGYuVGVycmFmb3JtT3V0cHV0KFxuICAgICAgdGhpcyxcbiAgICAgIFwicHJvdmlzaW9uaW5nX3N0YXRlXCIsXG4gICAgICB7XG4gICAgICAgIHZhbHVlOiBgXFwkeyR7dGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5mcW59Lm91dHB1dC5wcm9wZXJ0aWVzLnByb3Zpc2lvbmluZ1N0YXRlfWAsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBcIlRoZSBwcm92aXNpb25pbmcgc3RhdGUgb2YgdGhlIE5ldHdvcmsgV2F0Y2hlclwiLFxuICAgICAgfSxcbiAgICApO1xuXG4gICAgLy8gT3ZlcnJpZGUgbG9naWNhbCBJRHNcbiAgICB0aGlzLmlkT3V0cHV0Lm92ZXJyaWRlTG9naWNhbElkKFwiaWRcIik7XG4gICAgdGhpcy5uYW1lT3V0cHV0Lm92ZXJyaWRlTG9naWNhbElkKFwibmFtZVwiKTtcbiAgICB0aGlzLmxvY2F0aW9uT3V0cHV0Lm92ZXJyaWRlTG9naWNhbElkKFwibG9jYXRpb25cIik7XG4gICAgdGhpcy5wcm92aXNpb25pbmdTdGF0ZU91dHB1dC5vdmVycmlkZUxvZ2ljYWxJZChcInByb3Zpc2lvbmluZ19zdGF0ZVwiKTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFJFUVVJUkVEIEFCU1RSQUNUIE1FVEhPRFMgRlJPTSBBemFwaVJlc291cmNlXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGRlZmF1bHQgQVBJIHZlcnNpb24gdG8gdXNlIHdoZW4gbm8gZXhwbGljaXQgdmVyc2lvbiBpcyBzcGVjaWZpZWRcbiAgICogUmV0dXJucyB0aGUgbGF0ZXN0IHN0YWJsZSB2ZXJzaW9uIGFzIHRoZSBkZWZhdWx0XG4gICAqL1xuICBwcm90ZWN0ZWQgZGVmYXVsdFZlcnNpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCIyMDI0LTAxLTAxXCI7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgQXp1cmUgcmVzb3VyY2UgdHlwZSBmb3IgTmV0d29yayBXYXRjaGVyXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVzb3VyY2VUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIE5FVFdPUktfV0FUQ0hFUl9UWVBFO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIEFQSSBzY2hlbWEgZm9yIHRoZSByZXNvbHZlZCB2ZXJzaW9uXG4gICAqIFVzZXMgdGhlIGZyYW1ld29yaydzIHNjaGVtYSByZXNvbHV0aW9uIHRvIGdldCB0aGUgYXBwcm9wcmlhdGUgc2NoZW1hXG4gICAqL1xuICBwcm90ZWN0ZWQgYXBpU2NoZW1hKCk6IEFwaVNjaGVtYSB7XG4gICAgcmV0dXJuIHRoaXMucmVzb2x2ZVNjaGVtYSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB0aGF0IHRoaXMgcmVzb3VyY2UgdHlwZSByZXF1aXJlcyBhIGxvY2F0aW9uXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVxdWlyZXNMb2NhdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIHRoZSByZXNvdXJjZSBib2R5IGZvciB0aGUgQXp1cmUgQVBJIGNhbGxcbiAgICpcbiAgICogTmV0d29yayBXYXRjaGVyIGlzIGEgc2ltcGxlIHJlc291cmNlIHdpdGggYW4gZW1wdHkgcHJvcGVydGllcyBibG9jay5cbiAgICogQWxsIGNvbmZpZ3VyYXRpb24gaXMgaGFuZGxlZCBhdCB0aGUgcmVzb3VyY2UgbGV2ZWwgKG5hbWUsIGxvY2F0aW9uLCB0YWdzKS5cbiAgICovXG4gIHByb3RlY3RlZCBjcmVhdGVSZXNvdXJjZUJvZHkoX3Byb3BzOiBhbnkpOiBhbnkge1xuICAgIC8vIE5ldHdvcmsgV2F0Y2hlciBoYXMgYW4gZW1wdHkgcHJvcGVydGllcyBibG9ja1xuICAgIC8vIFRoZSByZXNvdXJjZSBpcyBjb25maWd1cmVkIHByaW1hcmlseSB0aHJvdWdoIG5hbWUsIGxvY2F0aW9uLCBhbmQgdGFnc1xuICAgIGNvbnN0IGJvZHk6IGFueSA9IHtcbiAgICAgIHByb3BlcnRpZXM6IHt9LFxuICAgIH07XG5cbiAgICByZXR1cm4gYm9keTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlcyB0aGUgcGFyZW50IHJlc291cmNlIElEIGZvciBOZXR3b3JrIFdhdGNoZXJcbiAgICogTmV0d29yayBXYXRjaGVyIGlzIGEgdG9wLWxldmVsIHJlc291cmNlIHdpdGhpbiBhIHJlc291cmNlIGdyb3VwXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyAtIFRoZSByZXNvdXJjZSBwcm9wZXJ0aWVzXG4gICAqIEByZXR1cm5zIFRoZSBwYXJlbnQgcmVzb3VyY2UgSUQgKHRoZSByZXNvdXJjZSBncm91cClcbiAgICovXG4gIHByb3RlY3RlZCByZXNvbHZlUGFyZW50SWQocHJvcHM6IGFueSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIChwcm9wcyBhcyBOZXR3b3JrV2F0Y2hlclByb3BzKS5yZXNvdXJjZUdyb3VwSWQ7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Integration test for Azure Network Watcher
|
|
3
|
+
*
|
|
4
|
+
* This test demonstrates basic usage of the NetworkWatcher construct
|
|
5
|
+
* and validates deployment, idempotency, and cleanup.
|
|
6
|
+
*
|
|
7
|
+
* IMPORTANT: Azure only allows one Network Watcher per subscription per region.
|
|
8
|
+
* If a Network Watcher already exists in the test region, this test will fail.
|
|
9
|
+
*
|
|
10
|
+
* Run with: npm run integration:nostream
|
|
11
|
+
*/
|
|
12
|
+
import "cdktf/lib/testing/adapters/jest";
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Integration test for Azure Network Watcher
|
|
4
|
+
*
|
|
5
|
+
* This test demonstrates basic usage of the NetworkWatcher construct
|
|
6
|
+
* and validates deployment, idempotency, and cleanup.
|
|
7
|
+
*
|
|
8
|
+
* IMPORTANT: Azure only allows one Network Watcher per subscription per region.
|
|
9
|
+
* If a Network Watcher already exists in the test region, this test will fail.
|
|
10
|
+
*
|
|
11
|
+
* Run with: npm run integration:nostream
|
|
12
|
+
*/
|
|
13
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
+
const cdktf_1 = require("cdktf");
|
|
15
|
+
require("cdktf/lib/testing/adapters/jest");
|
|
16
|
+
const azure_resourcegroup_1 = require("../../azure-resourcegroup");
|
|
17
|
+
const provider_1 = require("../../core-azure/lib/azapi/providers-azapi/provider");
|
|
18
|
+
const testing_1 = require("../../testing");
|
|
19
|
+
const network_watcher_1 = require("../lib/network-watcher");
|
|
20
|
+
/**
|
|
21
|
+
* Example stack demonstrating Network Watcher usage
|
|
22
|
+
*
|
|
23
|
+
* Note: This example creates a dedicated resource group for the Network Watcher.
|
|
24
|
+
* In practice, Azure often uses a resource group named "NetworkWatcherRG" for
|
|
25
|
+
* automatically provisioned Network Watchers.
|
|
26
|
+
*/
|
|
27
|
+
class NetworkWatcherExampleStack extends cdktf_1.TerraformStack {
|
|
28
|
+
constructor(scope, id) {
|
|
29
|
+
super(scope, id);
|
|
30
|
+
// Configure AZAPI provider
|
|
31
|
+
new provider_1.AzapiProvider(this, "azapi", {});
|
|
32
|
+
// Create a resource group for Network Watcher
|
|
33
|
+
// Note: Azure typically uses NetworkWatcherRG for auto-provisioned Network Watchers
|
|
34
|
+
// Using northeurope to avoid conflict with existing Network Watchers
|
|
35
|
+
const resourceGroup = new azure_resourcegroup_1.ResourceGroup(this, "example-rg", {
|
|
36
|
+
name: "nw-example-rg",
|
|
37
|
+
location: "northeurope",
|
|
38
|
+
tags: {
|
|
39
|
+
environment: "example",
|
|
40
|
+
purpose: "integration-test",
|
|
41
|
+
},
|
|
42
|
+
});
|
|
43
|
+
// Example 1: Basic Network Watcher
|
|
44
|
+
// Note: Only one Network Watcher per region per subscription is allowed
|
|
45
|
+
new network_watcher_1.NetworkWatcher(this, "basic-network-watcher", {
|
|
46
|
+
name: "nw-basic-example",
|
|
47
|
+
location: resourceGroup.props.location,
|
|
48
|
+
resourceGroupId: resourceGroup.id,
|
|
49
|
+
tags: {
|
|
50
|
+
example: "basic",
|
|
51
|
+
},
|
|
52
|
+
});
|
|
53
|
+
// Example 2: Network Watcher with specific version
|
|
54
|
+
// Using a different construct ID but same region (this is for demonstration only -
|
|
55
|
+
// in practice, you should only have one Network Watcher per region)
|
|
56
|
+
// This example shows version pinning but would fail if deployed alongside Example 1
|
|
57
|
+
// since both use the same region.
|
|
58
|
+
// Uncomment for testing version pinning in a different region:
|
|
59
|
+
/*
|
|
60
|
+
new NetworkWatcher(this, "versioned-network-watcher", {
|
|
61
|
+
name: "nw-versioned-example",
|
|
62
|
+
location: "westus2", // Different region
|
|
63
|
+
resourceGroupId: resourceGroup.id,
|
|
64
|
+
apiVersion: "2024-01-01",
|
|
65
|
+
tags: {
|
|
66
|
+
example: "versioned",
|
|
67
|
+
},
|
|
68
|
+
});
|
|
69
|
+
*/
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
describe("Network Watcher Integration Test", () => {
|
|
73
|
+
it("should deploy, validate idempotency, and cleanup Network Watcher resources", () => {
|
|
74
|
+
const app = cdktf_1.Testing.app();
|
|
75
|
+
const stack = new NetworkWatcherExampleStack(app, "test-network-watcher");
|
|
76
|
+
const synthesized = cdktf_1.Testing.fullSynth(stack);
|
|
77
|
+
// This will:
|
|
78
|
+
// 1. Run terraform apply to deploy resources
|
|
79
|
+
// 2. Run terraform plan to check idempotency (no changes expected)
|
|
80
|
+
// 3. Run terraform destroy to cleanup resources
|
|
81
|
+
(0, testing_1.TerraformApplyCheckAndDestroy)(synthesized);
|
|
82
|
+
}, 600000); // 10 minute timeout for deployment and cleanup
|
|
83
|
+
});
|
|
84
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV0d29yay13YXRjaGVyLmludGVnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2F6dXJlLW5ldHdvcmt3YXRjaGVyL3Rlc3QvbmV0d29yay13YXRjaGVyLmludGVnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7OztHQVVHOztBQUVILGlDQUFnRDtBQUVoRCwyQ0FBeUM7QUFDekMsbUVBQTBEO0FBQzFELGtGQUFvRjtBQUNwRiwyQ0FBOEQ7QUFDOUQsNERBQXdEO0FBRXhEOzs7Ozs7R0FNRztBQUNILE1BQU0sMEJBQTJCLFNBQVEsc0JBQWM7SUFDckQsWUFBWSxLQUFnQixFQUFFLEVBQVU7UUFDdEMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQiwyQkFBMkI7UUFDM0IsSUFBSSx3QkFBYSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFckMsOENBQThDO1FBQzlDLG9GQUFvRjtRQUNwRixxRUFBcUU7UUFDckUsTUFBTSxhQUFhLEdBQUcsSUFBSSxtQ0FBYSxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUU7WUFDMUQsSUFBSSxFQUFFLGVBQWU7WUFDckIsUUFBUSxFQUFFLGFBQWE7WUFDdkIsSUFBSSxFQUFFO2dCQUNKLFdBQVcsRUFBRSxTQUFTO2dCQUN0QixPQUFPLEVBQUUsa0JBQWtCO2FBQzVCO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsbUNBQW1DO1FBQ25DLHdFQUF3RTtRQUN4RSxJQUFJLGdDQUFjLENBQUMsSUFBSSxFQUFFLHVCQUF1QixFQUFFO1lBQ2hELElBQUksRUFBRSxrQkFBa0I7WUFDeEIsUUFBUSxFQUFFLGFBQWEsQ0FBQyxLQUFLLENBQUMsUUFBUztZQUN2QyxlQUFlLEVBQUUsYUFBYSxDQUFDLEVBQUU7WUFDakMsSUFBSSxFQUFFO2dCQUNKLE9BQU8sRUFBRSxPQUFPO2FBQ2pCO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsbURBQW1EO1FBQ25ELG1GQUFtRjtRQUNuRixvRUFBb0U7UUFDcEUsb0ZBQW9GO1FBQ3BGLGtDQUFrQztRQUNsQywrREFBK0Q7UUFDL0Q7Ozs7Ozs7Ozs7VUFVRTtJQUNKLENBQUM7Q0FDRjtBQUVELFFBQVEsQ0FBQyxrQ0FBa0MsRUFBRSxHQUFHLEVBQUU7SUFDaEQsRUFBRSxDQUFDLDRFQUE0RSxFQUFFLEdBQUcsRUFBRTtRQUNwRixNQUFNLEdBQUcsR0FBRyxlQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDMUIsTUFBTSxLQUFLLEdBQUcsSUFBSSwwQkFBMEIsQ0FBQyxHQUFHLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztRQUMxRSxNQUFNLFdBQVcsR0FBRyxlQUFPLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTdDLGFBQWE7UUFDYiw2Q0FBNkM7UUFDN0MsbUVBQW1FO1FBQ25FLGdEQUFnRDtRQUNoRCxJQUFBLHVDQUE2QixFQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQzdDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLCtDQUErQztBQUM3RCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogSW50ZWdyYXRpb24gdGVzdCBmb3IgQXp1cmUgTmV0d29yayBXYXRjaGVyXG4gKlxuICogVGhpcyB0ZXN0IGRlbW9uc3RyYXRlcyBiYXNpYyB1c2FnZSBvZiB0aGUgTmV0d29ya1dhdGNoZXIgY29uc3RydWN0XG4gKiBhbmQgdmFsaWRhdGVzIGRlcGxveW1lbnQsIGlkZW1wb3RlbmN5LCBhbmQgY2xlYW51cC5cbiAqXG4gKiBJTVBPUlRBTlQ6IEF6dXJlIG9ubHkgYWxsb3dzIG9uZSBOZXR3b3JrIFdhdGNoZXIgcGVyIHN1YnNjcmlwdGlvbiBwZXIgcmVnaW9uLlxuICogSWYgYSBOZXR3b3JrIFdhdGNoZXIgYWxyZWFkeSBleGlzdHMgaW4gdGhlIHRlc3QgcmVnaW9uLCB0aGlzIHRlc3Qgd2lsbCBmYWlsLlxuICpcbiAqIFJ1biB3aXRoOiBucG0gcnVuIGludGVncmF0aW9uOm5vc3RyZWFtXG4gKi9cblxuaW1wb3J0IHsgVGVzdGluZywgVGVycmFmb3JtU3RhY2sgfSBmcm9tIFwiY2RrdGZcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgXCJjZGt0Zi9saWIvdGVzdGluZy9hZGFwdGVycy9qZXN0XCI7XG5pbXBvcnQgeyBSZXNvdXJjZUdyb3VwIH0gZnJvbSBcIi4uLy4uL2F6dXJlLXJlc291cmNlZ3JvdXBcIjtcbmltcG9ydCB7IEF6YXBpUHJvdmlkZXIgfSBmcm9tIFwiLi4vLi4vY29yZS1henVyZS9saWIvYXphcGkvcHJvdmlkZXJzLWF6YXBpL3Byb3ZpZGVyXCI7XG5pbXBvcnQgeyBUZXJyYWZvcm1BcHBseUNoZWNrQW5kRGVzdHJveSB9IGZyb20gXCIuLi8uLi90ZXN0aW5nXCI7XG5pbXBvcnQgeyBOZXR3b3JrV2F0Y2hlciB9IGZyb20gXCIuLi9saWIvbmV0d29yay13YXRjaGVyXCI7XG5cbi8qKlxuICogRXhhbXBsZSBzdGFjayBkZW1vbnN0cmF0aW5nIE5ldHdvcmsgV2F0Y2hlciB1c2FnZVxuICpcbiAqIE5vdGU6IFRoaXMgZXhhbXBsZSBjcmVhdGVzIGEgZGVkaWNhdGVkIHJlc291cmNlIGdyb3VwIGZvciB0aGUgTmV0d29yayBXYXRjaGVyLlxuICogSW4gcHJhY3RpY2UsIEF6dXJlIG9mdGVuIHVzZXMgYSByZXNvdXJjZSBncm91cCBuYW1lZCBcIk5ldHdvcmtXYXRjaGVyUkdcIiBmb3JcbiAqIGF1dG9tYXRpY2FsbHkgcHJvdmlzaW9uZWQgTmV0d29yayBXYXRjaGVycy5cbiAqL1xuY2xhc3MgTmV0d29ya1dhdGNoZXJFeGFtcGxlU3RhY2sgZXh0ZW5kcyBUZXJyYWZvcm1TdGFjayB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgLy8gQ29uZmlndXJlIEFaQVBJIHByb3ZpZGVyXG4gICAgbmV3IEF6YXBpUHJvdmlkZXIodGhpcywgXCJhemFwaVwiLCB7fSk7XG5cbiAgICAvLyBDcmVhdGUgYSByZXNvdXJjZSBncm91cCBmb3IgTmV0d29yayBXYXRjaGVyXG4gICAgLy8gTm90ZTogQXp1cmUgdHlwaWNhbGx5IHVzZXMgTmV0d29ya1dhdGNoZXJSRyBmb3IgYXV0by1wcm92aXNpb25lZCBOZXR3b3JrIFdhdGNoZXJzXG4gICAgLy8gVXNpbmcgbm9ydGhldXJvcGUgdG8gYXZvaWQgY29uZmxpY3Qgd2l0aCBleGlzdGluZyBOZXR3b3JrIFdhdGNoZXJzXG4gICAgY29uc3QgcmVzb3VyY2VHcm91cCA9IG5ldyBSZXNvdXJjZUdyb3VwKHRoaXMsIFwiZXhhbXBsZS1yZ1wiLCB7XG4gICAgICBuYW1lOiBcIm53LWV4YW1wbGUtcmdcIixcbiAgICAgIGxvY2F0aW9uOiBcIm5vcnRoZXVyb3BlXCIsXG4gICAgICB0YWdzOiB7XG4gICAgICAgIGVudmlyb25tZW50OiBcImV4YW1wbGVcIixcbiAgICAgICAgcHVycG9zZTogXCJpbnRlZ3JhdGlvbi10ZXN0XCIsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgLy8gRXhhbXBsZSAxOiBCYXNpYyBOZXR3b3JrIFdhdGNoZXJcbiAgICAvLyBOb3RlOiBPbmx5IG9uZSBOZXR3b3JrIFdhdGNoZXIgcGVyIHJlZ2lvbiBwZXIgc3Vic2NyaXB0aW9uIGlzIGFsbG93ZWRcbiAgICBuZXcgTmV0d29ya1dhdGNoZXIodGhpcywgXCJiYXNpYy1uZXR3b3JrLXdhdGNoZXJcIiwge1xuICAgICAgbmFtZTogXCJudy1iYXNpYy1leGFtcGxlXCIsXG4gICAgICBsb2NhdGlvbjogcmVzb3VyY2VHcm91cC5wcm9wcy5sb2NhdGlvbiEsXG4gICAgICByZXNvdXJjZUdyb3VwSWQ6IHJlc291cmNlR3JvdXAuaWQsXG4gICAgICB0YWdzOiB7XG4gICAgICAgIGV4YW1wbGU6IFwiYmFzaWNcIixcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICAvLyBFeGFtcGxlIDI6IE5ldHdvcmsgV2F0Y2hlciB3aXRoIHNwZWNpZmljIHZlcnNpb25cbiAgICAvLyBVc2luZyBhIGRpZmZlcmVudCBjb25zdHJ1Y3QgSUQgYnV0IHNhbWUgcmVnaW9uICh0aGlzIGlzIGZvciBkZW1vbnN0cmF0aW9uIG9ubHkgLVxuICAgIC8vIGluIHByYWN0aWNlLCB5b3Ugc2hvdWxkIG9ubHkgaGF2ZSBvbmUgTmV0d29yayBXYXRjaGVyIHBlciByZWdpb24pXG4gICAgLy8gVGhpcyBleGFtcGxlIHNob3dzIHZlcnNpb24gcGlubmluZyBidXQgd291bGQgZmFpbCBpZiBkZXBsb3llZCBhbG9uZ3NpZGUgRXhhbXBsZSAxXG4gICAgLy8gc2luY2UgYm90aCB1c2UgdGhlIHNhbWUgcmVnaW9uLlxuICAgIC8vIFVuY29tbWVudCBmb3IgdGVzdGluZyB2ZXJzaW9uIHBpbm5pbmcgaW4gYSBkaWZmZXJlbnQgcmVnaW9uOlxuICAgIC8qXG4gICAgbmV3IE5ldHdvcmtXYXRjaGVyKHRoaXMsIFwidmVyc2lvbmVkLW5ldHdvcmstd2F0Y2hlclwiLCB7XG4gICAgICBuYW1lOiBcIm53LXZlcnNpb25lZC1leGFtcGxlXCIsXG4gICAgICBsb2NhdGlvbjogXCJ3ZXN0dXMyXCIsICAvLyBEaWZmZXJlbnQgcmVnaW9uXG4gICAgICByZXNvdXJjZUdyb3VwSWQ6IHJlc291cmNlR3JvdXAuaWQsXG4gICAgICBhcGlWZXJzaW9uOiBcIjIwMjQtMDEtMDFcIixcbiAgICAgIHRhZ3M6IHtcbiAgICAgICAgZXhhbXBsZTogXCJ2ZXJzaW9uZWRcIixcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgKi9cbiAgfVxufVxuXG5kZXNjcmliZShcIk5ldHdvcmsgV2F0Y2hlciBJbnRlZ3JhdGlvbiBUZXN0XCIsICgpID0+IHtcbiAgaXQoXCJzaG91bGQgZGVwbG95LCB2YWxpZGF0ZSBpZGVtcG90ZW5jeSwgYW5kIGNsZWFudXAgTmV0d29yayBXYXRjaGVyIHJlc291cmNlc1wiLCAoKSA9PiB7XG4gICAgY29uc3QgYXBwID0gVGVzdGluZy5hcHAoKTtcbiAgICBjb25zdCBzdGFjayA9IG5ldyBOZXR3b3JrV2F0Y2hlckV4YW1wbGVTdGFjayhhcHAsIFwidGVzdC1uZXR3b3JrLXdhdGNoZXJcIik7XG4gICAgY29uc3Qgc3ludGhlc2l6ZWQgPSBUZXN0aW5nLmZ1bGxTeW50aChzdGFjayk7XG5cbiAgICAvLyBUaGlzIHdpbGw6XG4gICAgLy8gMS4gUnVuIHRlcnJhZm9ybSBhcHBseSB0byBkZXBsb3kgcmVzb3VyY2VzXG4gICAgLy8gMi4gUnVuIHRlcnJhZm9ybSBwbGFuIHRvIGNoZWNrIGlkZW1wb3RlbmN5IChubyBjaGFuZ2VzIGV4cGVjdGVkKVxuICAgIC8vIDMuIFJ1biB0ZXJyYWZvcm0gZGVzdHJveSB0byBjbGVhbnVwIHJlc291cmNlc1xuICAgIFRlcnJhZm9ybUFwcGx5Q2hlY2tBbmREZXN0cm95KHN5bnRoZXNpemVkKTtcbiAgfSwgNjAwMDAwKTsgLy8gMTAgbWludXRlIHRpbWVvdXQgZm9yIGRlcGxveW1lbnQgYW5kIGNsZWFudXBcbn0pO1xuIl19
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Comprehensive tests for the NetworkWatcher implementation
|
|
3
|
+
*
|
|
4
|
+
* This test suite validates the NetworkWatcher class using the AzapiResource framework.
|
|
5
|
+
* Tests cover automatic version resolution, explicit version pinning, schema validation,
|
|
6
|
+
* property configurations, and resource creation.
|
|
7
|
+
*/
|
|
8
|
+
export {};
|