| // Copyright (c) HashiCorp, Inc. |
| // SPDX-License-Identifier: MPL-2.0 |
| |
| package namespace |
| |
| import ( |
| "testing" |
| ) |
| |
| func TestSplitIDFromString(t *testing.T) { |
| tcases := []struct { |
| input string |
| id string |
| prefix string |
| }{ |
| { |
| "foo", |
| "", |
| "foo", |
| }, |
| { |
| "foo.id", |
| "id", |
| "foo", |
| }, |
| { |
| "foo.foo.id", |
| "id", |
| "foo.foo", |
| }, |
| { |
| "foo.foo/foo.id", |
| "id", |
| "foo.foo/foo", |
| }, |
| { |
| "foo.foo/.id", |
| "id", |
| "foo.foo/", |
| }, |
| { |
| "foo.foo/foo", |
| "", |
| "foo.foo/foo", |
| }, |
| { |
| "foo.foo/f", |
| "", |
| "foo.foo/f", |
| }, |
| { |
| "foo.foo/", |
| "", |
| "foo.foo/", |
| }, |
| { |
| "b.foo", |
| "", |
| "b.foo", |
| }, |
| { |
| "s.foo", |
| "", |
| "s.foo", |
| }, |
| { |
| "t.foo", |
| "foo", |
| "t", |
| }, |
| } |
| |
| for _, c := range tcases { |
| pre, id := SplitIDFromString(c.input) |
| if pre != c.prefix || id != c.id { |
| t.Fatalf("bad test case: %s != %s, %s != %s", pre, c.prefix, id, c.id) |
| } |
| } |
| } |
| |
| func TestHasParent(t *testing.T) { |
| // Create ns1 |
| ns1 := &Namespace{ |
| ID: "id1", |
| Path: "ns1/", |
| } |
| |
| // Create ns1/ns2 |
| ns2 := &Namespace{ |
| ID: "id2", |
| Path: "ns1/ns2/", |
| } |
| |
| // Create ns1/ns2/ns3 |
| ns3 := &Namespace{ |
| ID: "id3", |
| Path: "ns1/ns2/ns3/", |
| } |
| |
| // Create ns4 |
| ns4 := &Namespace{ |
| ID: "id4", |
| Path: "ns4/", |
| } |
| |
| // Create ns4/ns5 |
| ns5 := &Namespace{ |
| ID: "id5", |
| Path: "ns4/ns5/", |
| } |
| |
| tests := []struct { |
| name string |
| parent *Namespace |
| ns *Namespace |
| expected bool |
| }{ |
| { |
| "is root an ancestor of ns1", |
| RootNamespace, |
| ns1, |
| true, |
| }, |
| { |
| "is ns1 an ancestor of ns2", |
| ns1, |
| ns2, |
| true, |
| }, |
| { |
| "is ns2 an ancestor of ns3", |
| ns2, |
| ns3, |
| true, |
| }, |
| { |
| "is ns1 an ancestor of ns3", |
| ns1, |
| ns3, |
| true, |
| }, |
| { |
| "is root an ancestor of ns3", |
| RootNamespace, |
| ns3, |
| true, |
| }, |
| { |
| "is ns4 an ancestor of ns3", |
| ns4, |
| ns3, |
| false, |
| }, |
| { |
| "is ns5 an ancestor of ns3", |
| ns5, |
| ns3, |
| false, |
| }, |
| { |
| "is ns1 an ancestor of ns5", |
| ns1, |
| ns5, |
| false, |
| }, |
| } |
| |
| for _, test := range tests { |
| actual := test.ns.HasParent(test.parent) |
| if actual != test.expected { |
| t.Fatalf("bad ancestor calculation; name: %q, actual: %t, expected: %t", test.name, actual, test.expected) |
| } |
| } |
| } |