package node import ( "testing" "gopkg.in/yaml.v3" "github.com/stretchr/testify/assert" ) func TestHash(t *testing.T) { nodeConfYml1 := ` WW_INTERNAL: 45 nodeprofiles: default: comment: This profile is automatically included for each node test: comment: This is a test profile nodes: n01: discoverable: true profiles: - default network devices: default: ipaddr: 10.0.10.1 n02: discoverable: true profiles: - default network devices: default: ipaddr: 10.0.10.2 ` nodeConfYml2 := ` WW_INTERNAL: 45 nodeprofiles: default: comment: This profile is automatically included for each node test: comment: This is a test profile nodes: n02: discoverable: true profiles: - default network devices: default: ipaddr: 10.0.10.2 n01: discoverable: true profiles: - default network devices: default: ipaddr: 10.0.10.1 ` nodeConfYml3 := ` WW_INTERNAL: 45 nodeprofiles: default: comment: This profile is automatically included for each node test: comment: This is a test profile nodes: n02: discoverable: true profiles: - default network devices: default: ipaddr: 10.0.10.2 n01: discoverable: true profiles: - default network devices: default: ipaddr: 10.0.10.3 ` var nodeConf1, nodeConf2, nodeConf3 NodeYaml err := yaml.Unmarshal([]byte(nodeConfYml1), &nodeConf1) assert.NoError(t, err) err = yaml.Unmarshal([]byte(nodeConfYml2), &nodeConf2) assert.NoError(t, err) err = yaml.Unmarshal([]byte(nodeConfYml3), &nodeConf3) assert.NoError(t, err) t.Run("Same NodeYaml with same conf", func(t *testing.T) { var testConf NodeYaml err = yaml.Unmarshal([]byte(nodeConfYml1), &testConf) assert.NoError(t, err) if testConf.Hash() != nodeConf1.Hash() { err = yaml.Unmarshal([]byte(nodeConfYml1), nodeConf1) assert.NoError(t, err) t.Errorf("Hashes for same configuration differs: %x != %x", nodeConf1.Hash(), nodeConf1.Hash()) } }) t.Run("Different sorted NodeYaml with same conf", func(t *testing.T) { yml1, err := yaml.Marshal(nodeConf1) assert.NoError(t, err) yml2, err := yaml.Marshal(nodeConf2) assert.NoError(t, err) if nodeConf2.Hash() != nodeConf1.Hash() { t.Errorf("Hashes for same configuration differs: %x != %x\njson1:\n%s,yml2:\n%s\n", nodeConf2.Hash(), nodeConf1.Hash(), yml1, yml2) } }) t.Run("Different NodeYaml with different conf", func(t *testing.T) { if nodeConf2.Hash() == nodeConf3.Hash() { t.Errorf("Hashes for different configuration is the same: %x == %x", nodeConf2.Hash(), nodeConf3.Hash()) } }) }