public void EqualsTest() { // Arrange string image = "repo/microsoft/azureiotedge-hub:002"; var edgeHubDockerModule = new EdgeHubDockerModule( "docker", ModuleStatus.Running, RestartPolicy.Always, new DockerConfig(image), new ConfigurationInfo("1"), new Dictionary <string, EnvVal>()); var edgeHubDockerRuntimeModule = new EdgeHubDockerRuntimeModule( ModuleStatus.Running, RestartPolicy.Always, new DockerConfig(image), 0, string.Empty, DateTime.MinValue, DateTime.MinValue, 0, DateTime.MinValue, ModuleStatus.Running, new ConfigurationInfo("1"), new Dictionary <string, EnvVal>()); // Act bool equal = edgeHubDockerModule.Equals(edgeHubDockerRuntimeModule); // Assert Assert.True(equal); }
public void TestJsonDeerialize() { // Arrange string json = @" { ""status"": ""running"", ""restartPolicy"": ""always"", ""exitCode"": 0, ""statusDescription"": """", ""lastStartTimeUtc"": ""0001-01-01T00:00:00"", ""lastExitTimeUtc"": ""0001-01-01T00:00:00"", ""restartCount"": 0, ""lastRestartTimeUtc"": ""0001-01-01T00:00:00"", ""runtimeStatus"": ""running"", ""type"": ""docker"", ""settings"": { ""image"": ""edg0eHubImage"", ""createOptions"": ""{}"" } }"; // Act var actual = JsonConvert.DeserializeObject <EdgeHubDockerRuntimeModule>(json); // Assert var expected = new EdgeHubDockerRuntimeModule( ModuleStatus.Running, RestartPolicy.Always, new DockerConfig("edg0eHubImage"), 0, string.Empty, DateTime.MinValue, DateTime.MinValue, 0, DateTime.MinValue, ModuleStatus.Running, null, new Dictionary <string, EnvVal>() ); Assert.Equal(expected, actual); }
public void TestJsonSerializeWithNonDefaultPriority() { // Arrange var module = new EdgeHubDockerRuntimeModule( ModuleStatus.Running, RestartPolicy.Always, new DockerConfig("edg0eHubImage:latest"), 0, string.Empty, DateTime.MinValue, DateTime.MinValue, 0, DateTime.MinValue, ModuleStatus.Running, ImagePullPolicy.Never, 10, new ConfigurationInfo("1"), new Dictionary <string, EnvVal>()); // Act JToken json = JToken.Parse(JsonConvert.SerializeObject(module)); // Assert JToken expected = JToken.Parse( @" { ""status"": ""running"", ""restartPolicy"": ""always"", ""imagePullPolicy"": ""never"", ""startupOrder"": 10, ""exitCode"": 0, ""statusDescription"": """", ""lastStartTimeUtc"": ""0001-01-01T00:00:00"", ""lastExitTimeUtc"": ""0001-01-01T00:00:00"", ""restartCount"": 0, ""lastRestartTimeUtc"": ""0001-01-01T00:00:00"", ""runtimeStatus"": ""running"", ""type"": ""docker"", ""settings"": { ""image"": ""edg0eHubImage:latest"", ""createOptions"": ""{}"" }, ""env"": {} } "); Assert.True(JToken.DeepEquals(expected, json)); }
public void TestWithRuntimeStatus() { var module = new EdgeHubDockerRuntimeModule( ModuleStatus.Running, RestartPolicy.Always, new DockerConfig("edg0eHubImage"), 0, string.Empty, DateTime.MinValue, DateTime.MinValue, 0, DateTime.MinValue, ModuleStatus.Running, new ConfigurationInfo("1"), new Dictionary <string, EnvVal>() ); var updatedModule1 = (EdgeHubDockerRuntimeModule)module.WithRuntimeStatus(ModuleStatus.Running); var updatedModule2 = (EdgeHubDockerRuntimeModule)module.WithRuntimeStatus(ModuleStatus.Unknown); Assert.Equal(module, updatedModule1); Assert.NotEqual(module, updatedModule2); Assert.Equal(updatedModule2.RuntimeStatus, ModuleStatus.Unknown); }
public async Task <ModuleSet> GetModulesAsync(CancellationToken token) { IEnumerable <ModuleRuntimeInfo> moduleStatuses = await this.moduleStatusProvider.GetModules(token); var modules = new List <IModule>(); ModuleSet moduleSet = this.deploymentConfig.GetModuleSet(); foreach (ModuleRuntimeInfo moduleRuntimeInfo in moduleStatuses) { if (moduleRuntimeInfo.Type != "docker" || !(moduleRuntimeInfo is ModuleRuntimeInfo <DockerReportedConfig> dockerRuntimeInfo)) { Events.InvalidModuleType(moduleRuntimeInfo); continue; } if (!moduleSet.Modules.TryGetValue(dockerRuntimeInfo.Name, out IModule configModule) || !(configModule is DockerModule dockerModule)) { dockerModule = new DockerModule(dockerRuntimeInfo.Name, string.Empty, ModuleStatus.Unknown, Core.RestartPolicy.Unknown, new DockerConfig(Constants.UnknownImage, new CreateContainerParameters(), Option.None <string>()), ImagePullPolicy.OnCreate, Core.Constants.HighestPriority, new ConfigurationInfo(), null, null); } Option <ModuleState> moduleStateOption = await this.moduleStateStore.Get(moduleRuntimeInfo.Name); ModuleState moduleState = moduleStateOption.GetOrElse(new ModuleState(0, moduleRuntimeInfo.ExitTime.GetOrElse(DateTime.MinValue))); string image = !string.IsNullOrWhiteSpace(dockerRuntimeInfo.Config.Image) ? dockerRuntimeInfo.Config.Image : dockerModule.Config.Image; var dockerReportedConfig = new DockerReportedConfig(image, dockerModule.Config.CreateOptions, dockerRuntimeInfo.Config.ImageHash, dockerModule.Config.Digest); IModule module; switch (moduleRuntimeInfo.Name) { case Core.Constants.EdgeHubModuleName: module = new EdgeHubDockerRuntimeModule( dockerModule.DesiredStatus, dockerModule.RestartPolicy, dockerReportedConfig, (int)dockerRuntimeInfo.ExitCode, moduleRuntimeInfo.Description, moduleRuntimeInfo.StartTime.GetOrElse(DateTime.MinValue), moduleRuntimeInfo.ExitTime.GetOrElse(DateTime.MinValue), moduleState.RestartCount, moduleState.LastRestartTimeUtc, moduleRuntimeInfo.ModuleStatus, dockerModule.ImagePullPolicy, dockerModule.Priority, dockerModule.ConfigurationInfo, dockerModule.Env); break; case Core.Constants.EdgeAgentModuleName: module = new EdgeAgentDockerRuntimeModule( dockerReportedConfig, moduleRuntimeInfo.ModuleStatus, (int)dockerRuntimeInfo.ExitCode, moduleRuntimeInfo.Description, moduleRuntimeInfo.StartTime.GetOrElse(DateTime.MinValue), moduleRuntimeInfo.ExitTime.GetOrElse(DateTime.MinValue), dockerModule.ImagePullPolicy, dockerModule.ConfigurationInfo, dockerModule.Env); break; default: module = new DockerRuntimeModule( moduleRuntimeInfo.Name, dockerModule.Version, dockerModule.DesiredStatus, dockerModule.RestartPolicy, dockerReportedConfig, (int)dockerRuntimeInfo.ExitCode, moduleRuntimeInfo.Description, moduleRuntimeInfo.StartTime.GetOrElse(DateTime.MinValue), moduleRuntimeInfo.ExitTime.GetOrElse(DateTime.MinValue), moduleState.RestartCount, moduleState.LastRestartTimeUtc, moduleRuntimeInfo.ModuleStatus, dockerModule.ImagePullPolicy, dockerModule.Priority, dockerModule.ConfigurationInfo, dockerModule.Env, dockerModule.Secrets); break; } modules.Add(module); } return(ModuleSet.Create(modules.ToArray())); }