public async void FileBackupReadFromBackupCallsEncryptDecrypt() { if (File.Exists(this.tempFileName)) { File.Delete(this.tempFileName); } ISerde <DeploymentConfigInfo> serde = this.GetSerde(); var encryptionProvider = new Mock <IEncryptionProvider>(); encryptionProvider.Setup(ep => ep.EncryptAsync(It.IsAny <string>())) .ReturnsAsync(serde.Serialize(ValidConfigInfo1)); encryptionProvider.Setup(ep => ep.DecryptAsync(It.IsAny <string>())) .ReturnsAsync(serde.Serialize(ValidConfigInfo1)); IDeploymentBackupSource fileBackup = new DeploymentFileBackup(this.tempFileName, serde, encryptionProvider.Object); await fileBackup.BackupDeploymentConfigAsync(ValidConfigInfo1); DeploymentConfigInfo config1 = await fileBackup.ReadFromBackupAsync(); Assert.NotNull(config1); Assert.True(File.Exists(this.tempFileName)); string backupJson = await DiskFile.ReadAllAsync(this.tempFileName); string returnedJson = serde.Serialize(config1); string expectedJson = serde.Serialize(ValidConfigInfo1); Assert.Equal(expectedJson, backupJson, ignoreCase: true); Assert.Equal(expectedJson, returnedJson, ignoreCase: true); encryptionProvider.Verify(ep => ep.EncryptAsync(It.IsAny <string>())); encryptionProvider.Verify(ep => ep.DecryptAsync(It.IsAny <string>())); }
public async void FileBackupDoesNotHappenIfConfigSourceReportsException() { if (File.Exists(this.tempFileName)) { File.Delete(this.tempFileName); } // Arrange var exceptionDeployment = new DeploymentConfigInfo(10, new InvalidOperationException()); ISerde <DeploymentConfigInfo> serde = this.GetSerde(); // Act IDeploymentBackupSource fileBackup = new DeploymentFileBackup(this.tempFileName, serde, NullEncryptionProvider.Instance); await fileBackup.BackupDeploymentConfigAsync(exceptionDeployment); // Assert Assert.False(File.Exists(this.tempFileName)); }
public async void FileBackupSuccessWhenFileNotExists() { if (File.Exists(this.tempFileName)) { File.Delete(this.tempFileName); } ISerde <DeploymentConfigInfo> serde = this.GetSerde(); IDeploymentBackupSource fileBackup = new DeploymentFileBackup(this.tempFileName, serde, NullEncryptionProvider.Instance); await fileBackup.BackupDeploymentConfigAsync(ValidConfigInfo1); Assert.True(File.Exists(this.tempFileName)); string backupJson = await DiskFile.ReadAllAsync(this.tempFileName); string expectedJson = serde.Serialize(ValidConfigInfo1); Assert.Equal(expectedJson, backupJson, ignoreCase: true); }
public async void FileBackupReadDoesNotThrowWhenBackupFileDoesNotExist() { if (File.Exists(this.tempFileName)) { File.Delete(this.tempFileName); } // Arrange ISerde <DeploymentConfigInfo> serde = this.GetSerde(); IDeploymentBackupSource fileBackup = new DeploymentFileBackup(this.tempFileName, serde, NullEncryptionProvider.Instance); // Act var config = await fileBackup.ReadFromBackupAsync(); // Assert Assert.NotNull(config); Assert.Equal(DeploymentConfigInfo.Empty, config); }
public async void FileBackupDoesnotThrowWhenEncryptFails() { if (File.Exists(this.tempFileName)) { File.Delete(this.tempFileName); } ISerde <DeploymentConfigInfo> serde = this.GetSerde(); var encryptionProvider = new Mock <IEncryptionProvider>(); encryptionProvider.Setup(ep => ep.EncryptAsync(It.IsAny <string>())) .ThrowsAsync(new WorkloadCommunicationException("failed", 404)); IDeploymentBackupSource fileBackup = new DeploymentFileBackup(this.tempFileName, serde, encryptionProvider.Object); await fileBackup.BackupDeploymentConfigAsync(ValidConfigInfo1); Assert.False(File.Exists(this.tempFileName)); encryptionProvider.Verify(ep => ep.EncryptAsync(It.IsAny <string>())); }
public async void FileBackupReadThrowsWhenDecryptFails() { if (File.Exists(this.tempFileName)) { File.Delete(this.tempFileName); } ISerde <DeploymentConfigInfo> serde = this.GetSerde(); var encryptionProvider = new Mock <IEncryptionProvider>(); encryptionProvider.Setup(ep => ep.EncryptAsync(It.IsAny <string>())) .ReturnsAsync(serde.Serialize(ValidConfigInfo1)); encryptionProvider.Setup(ep => ep.DecryptAsync(It.IsAny <string>())) .ThrowsAsync(new WorkloadCommunicationException("failed", 404)); IDeploymentBackupSource fileBackup = new DeploymentFileBackup(this.tempFileName, serde, encryptionProvider.Object); await fileBackup.BackupDeploymentConfigAsync(ValidConfigInfo1); await Assert.ThrowsAsync <WorkloadCommunicationException>(async() => await fileBackup.ReadFromBackupAsync()); }
protected override void Load(ContainerBuilder builder) { // IModuleClientProvider string edgeAgentConnectionString = $"{this.edgeDeviceConnectionString};{Constants.ModuleIdKey}={Constants.EdgeAgentModuleIdentityName}"; builder.Register( c => new ModuleClientProvider( edgeAgentConnectionString, c.Resolve <ISdkModuleClientProvider>(), this.upstreamProtocol, this.proxy, this.productInfo, this.closeOnIdleTimeout, this.idleTimeout, this.useServerHeartbeat)) .As <IModuleClientProvider>() .SingleInstance(); // IServiceClient builder.Register(c => new RetryingServiceClient(new ServiceClient(this.edgeDeviceConnectionString, this.deviceId))) .As <IServiceClient>() .SingleInstance(); // IModuleIdentityLifecycleManager builder.Register(c => new ModuleIdentityLifecycleManager(c.Resolve <IServiceClient>(), this.iotHubHostName, this.deviceId, this.gatewayHostname)) .As <IModuleIdentityLifecycleManager>() .SingleInstance(); // IDockerClient builder.Register(c => new DockerClientConfiguration(this.dockerHostname).CreateClient()) .As <IDockerClient>() .SingleInstance(); // ICombinedConfigProvider<CombinedDockerConfig> builder.Register(c => new CombinedDockerConfigProvider(this.dockerAuthConfig)) .As <ICombinedConfigProvider <CombinedDockerConfig> >() .SingleInstance(); // ICommandFactory builder.Register( async c => { var dockerClient = c.Resolve <IDockerClient>(); var dockerLoggingConfig = c.Resolve <DockerLoggingConfig>(); var combinedDockerConfigProvider = c.Resolve <ICombinedConfigProvider <CombinedDockerConfig> >(); IConfigSource configSource = await c.Resolve <Task <IConfigSource> >(); ICommandFactory factory = new DockerCommandFactory(dockerClient, dockerLoggingConfig, configSource, combinedDockerConfigProvider); factory = new MetricsCommandFactory(factory, c.Resolve <IMetricsProvider>()); return(new LoggingCommandFactory(factory, c.Resolve <ILoggerFactory>()) as ICommandFactory); }) .As <Task <ICommandFactory> >() .SingleInstance(); // IRuntimeInfoProvider builder.Register( async c => { IRuntimeInfoProvider runtimeInfoProvider = await RuntimeInfoProvider.CreateAsync(c.Resolve <IDockerClient>()); return(runtimeInfoProvider); }) .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(); // Task<IBackupSource> builder.Register( async c => { var serde = c.Resolve <ISerde <DeploymentConfigInfo> >(); var encryptionProviderTask = c.Resolve <Task <IEncryptionProvider> >(); IDeploymentBackupSource backupSource = new DeploymentFileBackup(this.backupConfigFilePath, serde, await encryptionProviderTask); return(backupSource); }) .As <Task <IDeploymentBackupSource> >() .SingleInstance(); // IDeviceManager builder.Register(c => new NullDeviceManager()) .As <IDeviceManager>() .SingleInstance(); }
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, this.useServerHeartbeat)) .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); 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(); // Task<IBackupSource> builder.Register( async c => { var serde = c.Resolve <ISerde <DeploymentConfigInfo> >(); var encryptionProviderTask = c.Resolve <Task <IEncryptionProvider> >(); IDeploymentBackupSource backupSource = new DeploymentFileBackup(this.backupConfigFilePath, serde, await encryptionProviderTask); return(backupSource); }) .As <Task <IDeploymentBackupSource> >() .SingleInstance(); // SystemResourcesMetrics builder.Register(c => new SystemResourcesMetrics(c.Resolve <IMetricsProvider>(), c.Resolve <IModuleManager>().GetSystemResourcesAsync, this.apiVersion, this.performanceMetricsUpdateFrequency)) .As <ISystemResourcesMetrics>() .SingleInstance(); }
public void CreateSuccess() { IDeploymentBackupSource backupSource = new DeploymentFileBackup(this.tempFileName, this.GetSerde(), NullEncryptionProvider.Instance); Assert.NotNull(backupSource); }