public void TestAddNewRootKeyRegistryCredential() { var runtimeConfig = new DockerRuntimeConfig( "1.0", new Dictionary <string, RegistryCredentials> { ["r1"] = new RegistryCredentials("mcr.microsoft.com", "foo", "foo", "credential") }); var runtimeInfo = new DockerRuntimeInfo("docker", runtimeConfig); var module = new Mock <IModule <DockerConfig> >(); module.SetupGet(m => m.Config).Returns(new DockerConfig("mcr.microsoft.com/windows/nanoserver:1809")); module.SetupGet(m => m.Name).Returns(Constants.EdgeAgentModuleName); var unixUris = new Dictionary <string, string> { { Constants.EdgeletWorkloadUriVariableName, "unix:///path/to/workload.sock" }, { Constants.EdgeletManagementUriVariableName, "unix:///path/to/mgmt.sock" } }; var windowsUris = new Dictionary <string, string> { { Constants.EdgeletWorkloadUriVariableName, "unix:///C:/path/to/workload/sock" }, { Constants.EdgeletManagementUriVariableName, "unix:///C:/path/to/mgmt/sock" } }; IConfigurationRoot configRoot = new ConfigurationBuilder().AddInMemoryCollection( RuntimeInformation.IsOSPlatform(OSPlatform.Windows) ? windowsUris : unixUris).Build(); var configSource = Mock.Of <IConfigSource>(s => s.Configuration == configRoot); var authConfig = new AuthConfig { ServerAddress = "mcr.microsoft.com" }; ICombinedConfigProvider <CombinedDockerConfig> provider = new CombinedEdgeletConfigProvider(new[] { authConfig }, configSource); var systemInfoSample = new SystemInfo("linux", "x86", "1"); var moduleManager = Mock.Of <IModuleManager>(m => m.GetSystemInfoAsync(CancellationToken.None) == Task.FromResult(systemInfoSample)); ICommandFactory factory = new EdgeletCommandFactory <CombinedDockerConfig>(moduleManager, configSource, provider); // Act CombinedDockerConfig config = provider.GetCombinedConfig(module.Object, runtimeInfo); // Assert Assert.Equal("credential", config.AuthConfig.OrDefault().RegistryToken); }
protected override void Load(ContainerBuilder builder) { // IModuleClientProvider builder.Register( c => new ModuleClientProvider( c.Resolve <ISdkModuleClientProvider>(), this.upstreamProtocol, this.proxy, this.productInfo, this.closeOnIdleTimeout, this.idleTimeout)) .As <IModuleClientProvider>() .SingleInstance(); // IModuleManager builder.Register(c => new ModuleManagementHttpClient(this.managementUri, this.apiVersion, Constants.EdgeletClientApiVersion)) .As <IModuleManager>() .As <IIdentityManager>() .As <IDeviceManager>() .SingleInstance(); // IModuleIdentityLifecycleManager var identityBuilder = new ModuleIdentityProviderServiceBuilder(this.iotHubHostName, this.deviceId, this.gatewayHostName); builder.Register(c => new ModuleIdentityLifecycleManager(c.Resolve <IIdentityManager>(), identityBuilder, this.workloadUri)) .As <IModuleIdentityLifecycleManager>() .SingleInstance(); // ICombinedConfigProvider<CombinedDockerConfig> builder.Register( async c => { IConfigSource configSource = await c.Resolve <Task <IConfigSource> >(); return(new CombinedEdgeletConfigProvider(this.dockerAuthConfig, configSource) as ICombinedConfigProvider <CombinedDockerConfig>); }) .As <Task <ICombinedConfigProvider <CombinedDockerConfig> > >() .SingleInstance(); // ICommandFactory builder.Register( async c => { var moduleManager = c.Resolve <IModuleManager>(); var combinedDockerConfigProviderTask = c.Resolve <Task <ICombinedConfigProvider <CombinedDockerConfig> > >(); var configSourceTask = c.Resolve <Task <IConfigSource> >(); var metricsProvider = c.Resolve <IMetricsProvider>(); var loggerFactory = c.Resolve <ILoggerFactory>(); IConfigSource configSource = await configSourceTask; ICombinedConfigProvider <CombinedDockerConfig> combinedDockerConfigProvider = await combinedDockerConfigProviderTask; ICommandFactory factory = new EdgeletCommandFactory <CombinedDockerConfig>(moduleManager, configSource, combinedDockerConfigProvider); factory = new MetricsCommandFactory(factory, metricsProvider); return(new LoggingCommandFactory(factory, loggerFactory) as ICommandFactory); }) .As <Task <ICommandFactory> >() .SingleInstance(); // Task<IRuntimeInfoProvider> builder.Register(c => Task.FromResult(new RuntimeInfoProvider <DockerReportedConfig>(c.Resolve <IModuleManager>()) as IRuntimeInfoProvider)) .As <Task <IRuntimeInfoProvider> >() .SingleInstance(); // Task<IEnvironmentProvider> builder.Register( async c => { var moduleStateStore = await c.Resolve <Task <IEntityStore <string, ModuleState> > >(); var restartPolicyManager = c.Resolve <IRestartPolicyManager>(); IRuntimeInfoProvider runtimeInfoProvider = await c.Resolve <Task <IRuntimeInfoProvider> >(); IEnvironmentProvider dockerEnvironmentProvider = await DockerEnvironmentProvider.CreateAsync(runtimeInfoProvider, moduleStateStore, restartPolicyManager, CancellationToken.None); return(dockerEnvironmentProvider); }) .As <Task <IEnvironmentProvider> >() .SingleInstance(); // SystemResourcesMetrics builder.Register(c => new SystemResourcesMetrics(c.Resolve <IMetricsProvider>(), c.Resolve <IModuleManager>().GetSystemResourcesAsync, this.apiVersion, this.performanceMetricsUpdateFrequency)) .SingleInstance(); }
protected override void Load(ContainerBuilder builder) { // IModuleClientProvider builder.Register(c => new EnvironmentModuleClientProvider(this.upstreamProtocol, this.productInfo)) .As <IModuleClientProvider>() .SingleInstance(); // IModuleManager builder.Register(c => new ModuleManagementHttpClient(this.managementUri)) .As <IModuleManager>() .As <IIdentityManager>() .SingleInstance(); // IModuleIdentityLifecycleManager var identityBuilder = new ModuleIdentityProviderServiceBuilder(this.iotHubHostName, this.deviceId, this.gatewayHostName); builder.Register(c => new ModuleIdentityLifecycleManager(c.Resolve <IIdentityManager>(), identityBuilder, this.workloadUri)) .As <IModuleIdentityLifecycleManager>() .SingleInstance(); // ICombinedConfigProvider<CombinedDockerConfig> builder.Register( async c => { IConfigSource configSource = await c.Resolve <Task <IConfigSource> >(); return(new CombinedEdgeletConfigProvider(this.dockerAuthConfig, configSource) as ICombinedConfigProvider <CombinedDockerConfig>); }) .As <Task <ICombinedConfigProvider <CombinedDockerConfig> > >() .SingleInstance(); // ICommandFactory builder.Register( async c => { var moduleManager = c.Resolve <IModuleManager>(); ICombinedConfigProvider <CombinedDockerConfig> combinedDockerConfigProvider = await c.Resolve <Task <ICombinedConfigProvider <CombinedDockerConfig> > >(); IConfigSource configSource = await c.Resolve <Task <IConfigSource> >(); var edgeletCommandFactory = new EdgeletCommandFactory <CombinedDockerConfig>(moduleManager, configSource, combinedDockerConfigProvider); return(new LoggingCommandFactory(edgeletCommandFactory, c.Resolve <ILoggerFactory>()) as ICommandFactory); }) .As <Task <ICommandFactory> >() .SingleInstance(); // IModuleRuntimeInfoProvider builder.Register(c => new RuntimeInfoProvider <DockerReportedConfig>(c.Resolve <IModuleManager>())) .As <IRuntimeInfoProvider>() .SingleInstance(); // Task<IEnvironmentProvider> builder.Register( async c => { var moduleStateStore = c.Resolve <IEntityStore <string, ModuleState> >(); var restartPolicyManager = c.Resolve <IRestartPolicyManager>(); var runtimeInfoProvider = c.Resolve <IRuntimeInfoProvider>(); IEnvironmentProvider dockerEnvironmentProvider = await DockerEnvironmentProvider.CreateAsync(runtimeInfoProvider, moduleStateStore, restartPolicyManager); return(dockerEnvironmentProvider); }) .As <Task <IEnvironmentProvider> >() .SingleInstance(); }