コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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));
        }
コード例 #4
0
        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()));
        }