Esempio n. 1
0
        public async Task GetModelsMultipleDtmisTryFromExpandedPartial()
        {
            const string dtmisExpanded = "dtmi:com:example:TemperatureController;1," +  // Expanded available.
                                         "dtmi:com:example:Thermostat;1," +
                                         "dtmi:azure:DeviceManagement:DeviceInformation;1";

            const string dtmisNonExpanded = "dtmi:com:example:ColdStorage;1," + // Model uses extends[], No Expanded available.
                                            "dtmi:com:example:Room;1," +
                                            "dtmi:com:example:Freezer;1";

            string[] expandedDtmis    = dtmisExpanded.Split(new[] { "," }, StringSplitOptions.RemoveEmptyEntries);
            string[] nonExpandedDtmis = dtmisNonExpanded.Split(new[] { "," }, StringSplitOptions.RemoveEmptyEntries);
            string[] totalDtmis       = expandedDtmis.Concat(nonExpandedDtmis).ToArray();

            ModelsRepositoryClientOptions options = new ModelsRepositoryClientOptions(dependencyResolution: ModelDependencyResolution.TryFromExpanded);
            ModelsRepositoryClient        client  = GetClient(ModelsRepositoryTestBase.ClientType.Local, options);

            // Multi-resolve dtmi:com:example:TemperatureController;1 + dtmi:com:example:ColdStorage;1
            IDictionary <string, string> result = await client.GetModelsAsync(new[] { expandedDtmis[0], nonExpandedDtmis[0] });

            result.Keys.Count.Should().Be(totalDtmis.Length);
            foreach (string id in totalDtmis)
            {
                result.Should().ContainKey(id);
                ModelsRepositoryTestBase.ParseRootDtmiFromJson(result[id]).Should().Be(id);
            }
        }
Esempio n. 2
0
        public void ClientOptions()
        {
            var defaultOptions = new ModelsRepositoryClientOptions();

            defaultOptions.Version.Should().Be(ModelsRepositoryClientOptions.ServiceVersion.V2021_02_11);

            // Default MetadataOptions values
            defaultOptions.RepositoryMetadata.IsMetadataProcessingEnabled.Should().BeTrue();

            // Ensure MetadataOptions properties are settable
            defaultOptions.RepositoryMetadata.IsMetadataProcessingEnabled = false;
        }
Esempio n. 3
0
        public async Task GetModelsSingleDtmiWithDepsDisableDependencyResolution(ModelsRepositoryTestBase.ClientType clientType)
        {
            const string dtmi = "dtmi:com:example:Thermostat;1";

            ModelsRepositoryClientOptions options = new ModelsRepositoryClientOptions(dependencyResolution: ModelDependencyResolution.Disabled);
            ModelsRepositoryClient        client  = GetClient(clientType, options);

            IDictionary <string, string> result = await client.GetModelsAsync(dtmi);

            result.Keys.Count.Should().Be(1);
            result.Should().ContainKey(dtmi);
            ModelsRepositoryTestBase.ParseRootDtmiFromJson(result[dtmi]).Should().Be(dtmi);
        }
        protected ModelsRepositoryClient GetClient(ModelsRepositoryTestBase.ClientType clientType, ModelsRepositoryClientOptions options = default)
        {
            if (options == null)
            {
                options = new ModelsRepositoryClientOptions();
            }

            return
                (clientType == ModelsRepositoryTestBase.ClientType.Local
                    ? InstrumentClient(
                     new ModelsRepositoryClient(
                         new Uri(ModelsRepositoryTestBase.TestLocalModelRepository),
                         InstrumentClientOptions(options)))
                    : InstrumentClient(
                     new ModelsRepositoryClient(
                         new Uri(ModelsRepositoryTestBase.TestRemoteModelRepository),
                         InstrumentClientOptions(options))));
        }
Esempio n. 5
0
        protected ModelsRepositoryClient GetClient(
            ModelsRepositoryTestBase.ClientType clientType = ModelsRepositoryTestBase.ClientType.Local,
            string repositoryLocation             = null,
            ModelsRepositoryClientOptions options = default)
        {
            if (options == null)
            {
                options = new ModelsRepositoryClientOptions();
            }

            if (string.IsNullOrEmpty(repositoryLocation))
            {
                repositoryLocation = clientType == ModelsRepositoryTestBase.ClientType.Local
                    ? ModelsRepositoryTestBase.TestLocalModelsRepository
                    : ModelsRepositoryTestBase.ProdRemoteModelsRepositoryCDN;
            }

            return(InstrumentClient(new ModelsRepositoryClient(new Uri(repositoryLocation), InstrumentClientOptions(options))));
        }
        public static void ClientInitialization()
        {
            #region Snippet:ModelsRepositorySamplesCreateServiceClientWithGlobalEndpoint

            // When no URI is provided for instantiation, the Azure IoT Models Repository global endpoint
            // https://devicemodels.azure.com/ is used.
            var client = new ModelsRepositoryClient(new ModelsRepositoryClientOptions());
            Console.WriteLine($"Initialized client pointing to the global endpoint: {client.RepositoryUri.AbsoluteUri}");

            #endregion Snippet:ModelsRepositorySamplesCreateServiceClientWithGlobalEndpoint

            #region Snippet:ModelsRepositorySamplesCreateServiceClientWithCustomEndpoint

            // This form shows specifing a custom URI for the models repository with default client options.
            const string remoteRepoEndpoint = "https://contoso.com/models";
            client = new ModelsRepositoryClient(new Uri(remoteRepoEndpoint));
            Console.WriteLine($"Initialized client pointing to a custom endpoint: {client.RepositoryUri.AbsoluteUri}");

            #endregion Snippet:ModelsRepositorySamplesCreateServiceClientWithCustomEndpoint

            #region Snippet:ModelsRepositorySamplesCreateServiceClientWithLocalRepository

            // The client will also work with a local filesystem URI.
            client = new ModelsRepositoryClient(new Uri(ClientSamplesLocalModelsRepository));
            Console.WriteLine($"Initialized client pointing to a local path: {client.RepositoryUri.LocalPath}");

            #endregion Snippet:ModelsRepositorySamplesCreateServiceClientWithLocalRepository

            #region Snippet:ModelsRepositorySamplesCreateServiceClientConfigureMetadataClientOption

            // ModelsRepositoryClientOptions supports configuration enabling consumption of repository
            // metadata within ModelsRepositoryClientOptions.RepositoryMetadata.
            // Fetching repository metadata is enabled by default.
            // This can be disabled as shown in the following snippet
            var customClientOptions = new ModelsRepositoryClientOptions();
            customClientOptions.RepositoryMetadata.IsMetadataProcessingEnabled = false;
            client = new ModelsRepositoryClient(options: customClientOptions);
            Console.WriteLine($"Initialized client with disabled metadata fetching pointing " +
                              $"to the global endpoint: {client.RepositoryUri.AbsoluteUri}.");

            #endregion Snippet:ModelsRepositorySamplesCreateServiceClientConfigureMetadataClientOption
        }
Esempio n. 7
0
        public async Task GetModelsSingleDtmiTryFromExpanded(ModelsRepositoryTestBase.ClientType clientType)
        {
            const string dtmi         = "dtmi:com:example:TemperatureController;1";
            const string expectedDeps = "dtmi:com:example:Thermostat;1,dtmi:azure:DeviceManagement:DeviceInformation;1";

            var expectedDtmis = $"{dtmi},{expectedDeps}".Split(new[] { "," }, StringSplitOptions.RemoveEmptyEntries);

            ModelsRepositoryClientOptions options = new ModelsRepositoryClientOptions(dependencyResolution: ModelDependencyResolution.TryFromExpanded);
            ModelsRepositoryClient        client  = GetClient(clientType, options);

            IDictionary <string, string> result = await client.GetModelsAsync(dtmi);

            result.Keys.Count.Should().Be(expectedDtmis.Length);

            foreach (var id in expectedDtmis)
            {
                result.Should().ContainKey(id);
                ModelsRepositoryTestBase.ParseRootDtmiFromJson(result[id]).Should().Be(id);
            }
        }
Esempio n. 8
0
        protected ModelsRepositoryClient GetClient(
            ModelsRepositoryTestBase.ClientType clientType,
            bool hasMetadata,
            ModelsRepositoryClientOptions options = default)
        {
            string targetLocation;

            if (clientType == ModelsRepositoryTestBase.ClientType.Local)
            {
                targetLocation = hasMetadata
                    ? ModelsRepositoryTestBase.TestLocalModelsRepositoryWithMetadata
                    : ModelsRepositoryTestBase.TestLocalModelsRepository;
            }
            else
            {
                targetLocation = hasMetadata
                    ? ModelsRepositoryTestBase.ProdRemoteModelsRepositoryCDN
                    : ModelsRepositoryTestBase.ProdRemoteModelsRepositoryGithub;
            }

            return(GetClient(repositoryLocation: targetLocation, options: options));
        }
 public HttpModelFetcher(ClientDiagnostics clientDiagnostics, ModelsRepositoryClientOptions clientOptions)
 {
     _pipeline          = CreatePipeline(clientOptions);
     _clientDiagnostics = clientDiagnostics;
 }