Пример #1
0
        protected void Initialize(MockContext context)
        {
            if (!initialized)
            {
                lock (locker)
                {
                    if (!initialized)
                    {
                        testEnv         = TestEnvironmentFactory.GetTestEnvironment();
                        resourcesClient = DigitalTwinsTestUtilities.GetResourceManagementClient(context, new RecordedDelegatingHandler {
                            StatusCodeToReturn = HttpStatusCode.OK
                        });
                        digitalTwinsClient = DigitalTwinsTestUtilities.GetDigitalTwinsClient(context, new RecordedDelegatingHandler {
                            StatusCodeToReturn = HttpStatusCode.OK
                        });

                        if (string.IsNullOrEmpty(Environment.GetEnvironmentVariable("AZURE_VM_TEST_LOCATION")))
                        {
                            location = DigitalTwinsTestUtilities.DefaultLocation;
                        }
                        else
                        {
                            location = Environment.GetEnvironmentVariable("AZURE_VM_TEST_LOCATION").Replace(" ", "").ToLower();
                        }

                        this.initialized = true;
                    }
                }
            }
        }
Пример #2
0
        public async Task CreateEndpointAsync(string instanceName)
        {
            var creds = GetAzureCredentials();

            var    subClient    = new SubscriptionClient(creds);
            string nextPageLink = null;

            do
            {
                var subs = nextPageLink == null
          ? await subClient.Subscriptions.ListAsync()
          : await subClient.Subscriptions.ListNextAsync(nextPageLink);

                nextPageLink = subs.NextPageLink;

                foreach (var sub in subs)
                {
                    var dtClient = new AzureDigitalTwinsManagementClient(creds);
                    dtClient.SubscriptionId = sub.SubscriptionId;

                    var instance = await FindDigitalTwinInstanceAsync(dtClient, instanceName);

                    if (instance == null)
                    {
                        _log.LogWarning($"Unable to find instance with name {instanceName} in subscription {sub.SubscriptionId}");
                        continue;
                    }

                    var components = instance.Id.Split(new[] { '/' }, StringSplitOptions.RemoveEmptyEntries);
                    if (components.Length != 8)
                    {
                        _log.LogWarning($"Unrecognized instance ID format: {instance.Id}");
                        continue;
                    }

                    DigitalTwinsEndpointResource endpoint = null;
                    try
                    {
                        endpoint = await dtClient.DigitalTwinsEndpoint.GetAsync(components[3], instanceName, EndpointId);
                    }
                    catch (ErrorResponseException e) when(e.Response.StatusCode == HttpStatusCode.NotFound)
                    {
                    }

                    if (endpoint == null)
                    {
                        await CreateNewEndpoint(dtClient, components[1], components[3], instanceName);
                    }

                    return;
                }
            } while (nextPageLink != null);

            throw new Exception($"Unable to find instance {instanceName}");
        }
Пример #3
0
        private async Task <DigitalTwinsDescription> FindDigitalTwinInstanceAsync(AzureDigitalTwinsManagementClient dtClient, string instanceName)
        {
            string nextPageLink           = null;
            DigitalTwinsDescription match = null;

            do
            {
                var instances = nextPageLink == null
          ? await dtClient.DigitalTwins.ListAsync()
          : await dtClient.DigitalTwins.ListNextAsync(nextPageLink);

                nextPageLink = instances.NextPageLink;

                match = instances.FirstOrDefault(x => string.Equals(x.Name, instanceName, StringComparison.OrdinalIgnoreCase));
                if (match != null)
                {
                    break;
                }
            } while (nextPageLink != null);

            return(match);
        }
Пример #4
0
        private async Task CreateNewEndpoint(AzureDigitalTwinsManagementClient dtClient, string subscriptionId, string resourceGroup, string instanceName)
        {
            var egClient = new EventGridManagementClient(GetAzureCredentials());

            egClient.SubscriptionId = subscriptionId;

            var topics = await egClient.Topics.ListBySubscriptionAsync($"name eq '{instanceName}'");

            var topic = topics.FirstOrDefault();

            if (topic == null)
            {
                _log.LogError($"Unable to find topic {instanceName} in subscription {subscriptionId}");
                return;
            }

            var topicResourceGroup = topic.Id.Split("/", StringSplitOptions.RemoveEmptyEntries)[3];
            var keys = await egClient.Topics.ListSharedAccessKeysAsync(topicResourceGroup, instanceName);

            _log.LogInformation($"Creating endpoint for {instanceName}");

            await dtClient.DigitalTwinsEndpoint.CreateOrUpdateAsync(resourceGroup, instanceName, EndpointId,
                                                                    new Microsoft.Azure.Management.DigitalTwins.Models.EventGrid(topic.Endpoint, keys.Key1, accessKey2: keys.Key2));
        }