blob: fd4c4c2f9988c2fbb219c8ca97261c68426c9b60 [file] [log] [blame]
// 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)
}
}
}