Skip to content

Commit

Permalink
Merged PR 927262: EdgeAgent: EdgeAgentDockerModule should not compare…
Browse files Browse the repository at this point in the history
… "version" property

EdgeAgent module has a version property which is not expected to be set, and should not be considered when comparing modules (in case it is set). Also removing configurationInfo from the comparison
  • Loading branch information
varunpuranik committed Jun 28, 2018
1 parent 2d6824b commit 2fd4bf1
Show file tree
Hide file tree
Showing 4 changed files with 96 additions and 20 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,6 @@ public virtual bool Equals(IModule<DockerConfig> other)
this.DesiredStatus == other.DesiredStatus &&
this.Config.Equals(other.Config) &&
this.RestartPolicy == other.RestartPolicy &&
this.ConfigurationInfo.Equals(other.ConfigurationInfo) &&
EnvDictionaryComparer.Equals(this.Env, other.Env);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,10 +23,8 @@ public override bool Equals(IModule<DockerConfig> other)
if (ReferenceEquals(this, other))
return true;
return string.Equals(this.Name, other.Name) &&
string.Equals(this.Version, other.Version) &&
string.Equals(this.Type, other.Type) &&
string.Equals(this.Config.Image, other.Config.Image) &&
this.ConfigurationInfo.Equals(other.ConfigurationInfo);
string.Equals(this.Config.Image, other.Config.Image);
}

public override int GetHashCode()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,19 +19,20 @@ public class DockerModuleTest
static readonly ConfigurationInfo DefaultConfigurationInfo = null;
static readonly DockerConfig Config1 = new DockerConfig("image1:42", @"{""HostConfig"": {""PortBindings"": {""43/udp"": [{""HostPort"": ""43""}], ""42/tcp"": [{""HostPort"": ""42""}]}}}");
static readonly DockerConfig Config2 = new DockerConfig("image2:42", @"{""HostConfig"": {""PortBindings"": {""43/udp"": [{""HostPort"": ""43""}], ""42/tcp"": [{""HostPort"": ""42""}]}}}");
static readonly IDictionary<string, EnvVal> DefaultEnvVals = new Dictionary<string, EnvVal> { ["Env1"] = new EnvVal("Val1") };
static readonly IModule Module1 = new DockerModule("mod1", "version1", ModuleStatus.Running, RestartPolicy.OnUnhealthy, Config1, DefaultConfigurationInfo, DefaultEnvVals);
static readonly IModule Module2 = new DockerModule("mod1", "version1", ModuleStatus.Running, RestartPolicy.OnUnhealthy, Config1, DefaultConfigurationInfo, DefaultEnvVals);
static readonly IModule Module3 = new DockerModule("mod3", "version1", ModuleStatus.Running, RestartPolicy.OnUnhealthy, Config1, DefaultConfigurationInfo, DefaultEnvVals);
static readonly IModule Module4 = new DockerModule("mod1", "version2", ModuleStatus.Running, RestartPolicy.OnUnhealthy, Config1, DefaultConfigurationInfo, DefaultEnvVals);
static readonly IModule Module6 = new DockerModule("mod1", "version1", ModuleStatus.Unknown, RestartPolicy.OnUnhealthy, Config1, DefaultConfigurationInfo, DefaultEnvVals);
static readonly IModule Module7 = new DockerModule("mod1", "version1", ModuleStatus.Running, RestartPolicy.OnUnhealthy, Config2, DefaultConfigurationInfo, DefaultEnvVals);
static readonly DockerModule Module8 = new DockerModule("mod1", "version1", ModuleStatus.Running, RestartPolicy.OnUnhealthy, Config1, DefaultConfigurationInfo, DefaultEnvVals);
static readonly IModule Module9 = new DockerModule("mod1", "version1", ModuleStatus.Running, RestartPolicy.Always, Config1, DefaultConfigurationInfo, DefaultEnvVals);
static readonly IModule Module10 = new DockerModule("mod1", "version1", ModuleStatus.Running, RestartPolicy.OnUnhealthy, Config1, DefaultConfigurationInfo, new Dictionary<string, EnvVal> { ["Env1"] = new EnvVal("Val2") });
static readonly IModule ModuleWithConfig = new DockerModule("mod1", "version1", ModuleStatus.Running, RestartPolicy.Always, Config1, new ConfigurationInfo("c1"), DefaultEnvVals);
static readonly DockerModule ValidJsonModule = new DockerModule("<module_name>", "<semantic_version_number>", ModuleStatus.Running, RestartPolicy.OnUnhealthy, Config1, DefaultConfigurationInfo, DefaultEnvVals);

static readonly IModule Module1 = new DockerModule("mod1", "version1", ModuleStatus.Running, RestartPolicy.OnUnhealthy, Config1, DefaultConfigurationInfo, null);
static readonly IModule Module2 = new DockerModule("mod1", "version1", ModuleStatus.Running, RestartPolicy.OnUnhealthy, Config1, DefaultConfigurationInfo, null);
static readonly IModule Module3 = new DockerModule("mod3", "version1", ModuleStatus.Running, RestartPolicy.OnUnhealthy, Config1, DefaultConfigurationInfo, null);
static readonly IModule Module4 = new DockerModule("mod1", "version2", ModuleStatus.Running, RestartPolicy.OnUnhealthy, Config1, DefaultConfigurationInfo, null);
static readonly IModule Module6 = new DockerModule("mod1", "version1", ModuleStatus.Unknown, RestartPolicy.OnUnhealthy, Config1, DefaultConfigurationInfo, null);
static readonly IModule Module7 = new DockerModule("mod1", "version1", ModuleStatus.Running, RestartPolicy.OnUnhealthy, Config2, DefaultConfigurationInfo, null);
static readonly DockerModule Module8 = new DockerModule("mod1", "version1", ModuleStatus.Running, RestartPolicy.OnUnhealthy, Config1, DefaultConfigurationInfo, null);
static readonly IModule Module9 = new DockerModule("mod1", "version1", ModuleStatus.Running, RestartPolicy.Always, Config1, DefaultConfigurationInfo, null);

static readonly DockerModule ValidJsonModule = new DockerModule("<module_name>", "<semantic_version_number>", ModuleStatus.Running, RestartPolicy.OnUnhealthy, Config1, DefaultConfigurationInfo, null);

const string SerializedModule = @"{""version"":""version1"",""type"":""docker"",""status"":""running"",""restartPolicy"":""on-unhealthy"",""settings"":{""image"":""image1:42"", ""createOptions"": {""HostConfig"": {""PortBindings"": {""43/udp"": [{""HostPort"": ""43""}], ""42/tcp"": [{""HostPort"": ""42""}]}}}},""configuration"":{""id"":""1""}}";
const string SerializedModule = @"{""version"":""version1"",""type"":""docker"",""status"":""running"",""restartPolicy"":""on-unhealthy"",""settings"":{""image"":""image1:42"", ""createOptions"": {""HostConfig"": {""PortBindings"": {""43/udp"": [{""HostPort"": ""43""}], ""42/tcp"": [{""HostPort"": ""42""}]}}}},""configuration"":{""id"":""1""},""env"":{""Env1"": {""value"":""Val1""}}}";

static readonly JObject TestJsonInputs = JsonConvert.DeserializeObject<JObject>(@"
{
Expand All @@ -48,7 +49,7 @@ public class DockerModuleTest
},
""configuration"": {
""id"": ""1""
}
},
},
{
""version"":""1.0.0"",
Expand Down Expand Up @@ -168,7 +169,12 @@ public class DockerModuleTest
},
""Configuration"": {
""id"": ""1""
}
},
""env"":{
""Env1"":{
""value"":""Val1""
}
}
},
{
""version"":""<semantic_version_number>"",
Expand Down Expand Up @@ -196,7 +202,12 @@ public class DockerModuleTest
},
""configuration"": {
""id"": ""1""
}
},
""env"":{
""Env1"":{
""value"":""Val1""
}
}
},
{
""VERSION"":""<semantic_version_number>"",
Expand Down Expand Up @@ -224,7 +235,12 @@ public class DockerModuleTest
},
""CONFIGURATION"": {
""id"": ""1""
}
},
""env"":{
""Env1"":{
""value"":""Val1""
}
}
}
],
""throwsException"":[
Expand Down Expand Up @@ -296,6 +312,8 @@ public void TestEquality()
Assert.NotEqual(Module1, Module6);
Assert.NotEqual(Module1, Module7);
Assert.Equal(Module1, Module8);
Assert.Equal(Module9, ModuleWithConfig);
Assert.NotEqual(Module1, Module10);

Assert.False(Module1.Equals(null));
Assert.False(Module8.Equals(null));
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
// Copyright (c) Microsoft. All rights reserved.
namespace Microsoft.Azure.Devices.Edge.Agent.Docker.Test
{
using System.Collections.Generic;
using Microsoft.Azure.Devices.Edge.Agent.Core;
using Microsoft.Azure.Devices.Edge.Util.Test.Common;
using Xunit;

public class EdgeAgentDockerModuleTest
{
public static IEnumerable<object[]> GetEaModules()
{
yield return new object[]
{
new EdgeAgentDockerModule("docker", new DockerConfig("Foo"), null, null),
new EdgeAgentDockerModule("docker", new DockerConfig("Foo"), null, null),
true
};

yield return new object[]
{
new EdgeAgentDockerModule("docker", new DockerConfig("Foo"), new ConfigurationInfo("c1"), new Dictionary<string, EnvVal>{ ["Env1"] = new EnvVal("EnvVal1")}, "version1"),
new EdgeAgentDockerModule("docker", new DockerConfig("Foo"), null, null),
true
};

yield return new object[]
{
new EdgeAgentDockerModule("docker", new DockerConfig("Foo"), new ConfigurationInfo("c1"), new Dictionary<string, EnvVal>{ ["Env1"] = new EnvVal("EnvVal1")}, "version1"),
new EdgeAgentDockerModule("docker", new DockerConfig("Foo"), new ConfigurationInfo("c2"), new Dictionary<string, EnvVal>{ ["Env2"] = new EnvVal("EnvVal2")}, "version2"),
true
};

yield return new object[]
{
new EdgeAgentDockerModule("docker", new DockerConfig("Foo", "{}"), new ConfigurationInfo("c1"), new Dictionary<string, EnvVal>{ ["Env1"] = new EnvVal("EnvVal1")}, "version1"),
new EdgeAgentDockerModule("docker", new DockerConfig("Foo", "{\"HostConfig\":{\"PortBindings\":{\"8883/tcp\":[{\"HostPort\":\"8883\"}],\"443/tcp\":[{\"HostPort\":\"443\"}]}}}"), new ConfigurationInfo("c2"), new Dictionary<string, EnvVal>{ ["Env2"] = new EnvVal("EnvVal2")}, "version2"),
true
};

yield return new object[]
{
new EdgeAgentDockerModule("docker", new DockerConfig("Foo"), null, null),
new EdgeAgentDockerModule("docker", new DockerConfig("Bar"), null, null),
false
};
}

[Theory]
[MemberData(nameof(GetEaModules))]
[Unit]
public void EqualsTest(EdgeAgentDockerModule mod1, EdgeAgentDockerModule mod2, bool areEqual)
{
// Act
bool result = mod1.Equals(mod2);

// Assert
Assert.Equal(areEqual, result);
}
}
}

0 comments on commit 2fd4bf1

Please sign in to comment.