public void PortBindingsCreatesAServiceWithPorts()
        {
            var createOptions = new Docker.Models.CreateContainerParameters
            {
                // Add a port binding to host
                HostConfig = new DockerModels.HostConfig
                {
                    PortBindings = new Dictionary <string, IList <DockerModels.PortBinding> >
                    {
                        ["10/TCP"] = new List <DockerModels.PortBinding>
                        {
                            new DockerModels.PortBinding
                            {
                                HostPort = "10"
                            }
                        }
                    }
                }
            };
            var config       = new CombinedDockerConfig("image", createOptions, Option.None <AuthConfig>());
            var docker       = new DockerModule("module1", "v1", ModuleStatus.Running, Core.RestartPolicy.Always, Config1, ImagePullPolicy.OnCreate, DefaultConfigurationInfo, EnvVars);
            var module       = new KubernetesModule(docker, config);
            var moduleLabels = new Dictionary <string, string>();
            var mapper       = new KubernetesServiceMapper(PortMapServiceType.ClusterIP);
            var moduleId     = new ModuleIdentity("hostname", "gatewayhost", "deviceid", "moduleid", Mock.Of <ICredentials>());

            var service = mapper.CreateService(moduleId, module, moduleLabels).OrDefault();

            Assert.Equal(1, service.Spec.Ports.Count);
            AssertPort(new V1ServicePort(10, "hostport-10-tcp", null, "TCP", 10), service.Spec.Ports.First());
            Assert.Equal("ClusterIP", service.Spec.Type);
        }
        public void LabelsConvertedAsLabelsAndSelectors()
        {
            var createOptions = new Docker.Models.CreateContainerParameters
            {
                // Add a port to be exposed
                ExposedPorts = new Dictionary <string, EmptyStruct>
                {
                    ["10/TCP"] = default(EmptyStruct)
                }
            };
            var config       = new CombinedDockerConfig("image", createOptions, Option.None <AuthConfig>());
            var docker       = new DockerModule("module1", "v1", ModuleStatus.Running, Core.RestartPolicy.Always, Config1, ImagePullPolicy.OnCreate, DefaultConfigurationInfo, EnvVars);
            var module       = new KubernetesModule(docker, config);
            var moduleLabels = new Dictionary <string, string> {
                { "Label1", "VaLue1" }
            };
            var mapper   = new KubernetesServiceMapper(PortMapServiceType.ClusterIP);
            var moduleId = new ModuleIdentity("hostname", "gatewayhost", "deviceid", "moduleid", Mock.Of <ICredentials>());

            var service = mapper.CreateService(moduleId, module, moduleLabels).OrDefault();

            Assert.Equal(1, service.Spec.Ports.Count);
            Assert.Equal(1, service.Metadata.Annotations.Count);
            Assert.NotNull(service.Metadata.Annotations[KubernetesConstants.CreationString]);
            Assert.Equal(1, service.Metadata.Labels.Count);
            Assert.Equal("VaLue1", service.Metadata.Labels["Label1"]);
            Assert.Equal("ClusterIP", service.Spec.Type);
            Assert.Equal(1, service.Spec.Selector.Count);
            Assert.Equal("VaLue1", service.Spec.Selector["Label1"]);
        }