package nodeengineclient import ( "strings" "testing" ) func TestTheHaveAndComposedKeysKeepTheirForms(t *testing.T) { fp := strings.Repeat("ab", 32) for module, want := range map[string]string{"gitea": "n1.gitea", "novox.be": "n1.novox=2ebe", "a/b": "n1.a/b"} { key, err := HaveKey("n1", module) if err != nil || key != want { t.Errorf("HaveKey(%q) = %q, %v", module, key, err) } if node, back, isNode, err := ParseHaveKey(key); err != nil || node != "n1" || back != module || isNode { t.Errorf("ParseHaveKey(%q) = %q %q %v %v", key, node, back, isNode, err) } ck, err := ComposedKey("n1", module, fp) if err != nil || ck != want+"."+fp { t.Errorf("ComposedKey(%q) = %q, %v", module, ck, err) } if node, back, part, isNode, err := ParseComposedKey(ck); err != nil || node != "n1" || back != module || part != fp || isNode { t.Errorf("ParseComposedKey(%q) = %q %q %q %v %v", ck, node, back, part, isNode, err) } } if node, module, isNode, err := ParseHaveKey("n1.node"); err != nil || node != "n1" || module != "" || !isNode { t.Errorf("the node's own have key: %q %q %v %v", node, module, isNode, err) } if node, _, _, isNode, err := ParseComposedKey("n1.node"); err != nil || node != "n1" || !isNode { t.Errorf("the node's own composition key: %q %v %v", node, isNode, err) } for _, bad := range [][2]string{{"", "m"}, {"n.1", "m"}, {"n1", ""}, {"n1", "node"}, {"n1", "a b"}, {"n1", "a=b"}, {"n1", "a..b"}} { if _, err := HaveKey(bad[0], bad[1]); err == nil { t.Errorf("HaveKey(%q, %q) keys", bad[0], bad[1]) } } if _, err := ComposedKey("n1", "m", "src2:"+fp); err == nil { t.Error("a fingerprint with its prefix is a key part") } for _, bad := range []string{"n1", "n1.m", "n1.m." + fp[:10], "n1.node." + fp, "n1.m." + fp + ".x"} { if _, _, _, _, err := ParseComposedKey(bad); err == nil { t.Errorf("ParseComposedKey(%q) reads a wrong key", bad) } } }