github.com/authzed/spicedb@v1.32.1-0.20240520085336-ebda56537386/pkg/tuple/onr_test.go (about) 1 package tuple 2 3 import ( 4 "testing" 5 6 core "github.com/authzed/spicedb/pkg/proto/core/v1" 7 8 "github.com/stretchr/testify/require" 9 ) 10 11 var onrTestCases = []struct { 12 serialized string 13 objectFormat *core.ObjectAndRelation 14 }{ 15 { 16 serialized: "tenant/testns:testobj#testrel", 17 objectFormat: ObjectAndRelation("tenant/testns", "testobj", "testrel"), 18 }, 19 { 20 serialized: "tenant/testns:veryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryverylong#testrel", 21 objectFormat: ObjectAndRelation("tenant/testns", "veryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryverylong", "testrel"), 22 }, 23 { 24 serialized: "tenant/testns:-base64YWZzZGZh-ZHNmZHPwn5iK8J+YivC/fmIrwn5iK==#testrel", 25 objectFormat: ObjectAndRelation("tenant/testns", "-base64YWZzZGZh-ZHNmZHPwn5iK8J+YivC/fmIrwn5iK==", "testrel"), 26 }, 27 { 28 serialized: "tenant/testns:*#testrel", 29 objectFormat: nil, 30 }, 31 { 32 serialized: "tenant/testns:testobj#...", 33 objectFormat: nil, 34 }, 35 { 36 serialized: "tenant/testns:testobj", 37 objectFormat: nil, 38 }, 39 { 40 serialized: "", 41 objectFormat: nil, 42 }, 43 } 44 45 func TestSerializeONR(t *testing.T) { 46 for _, tc := range onrTestCases { 47 tc := tc 48 if tc.objectFormat == nil { 49 continue 50 } 51 52 t.Run(tc.serialized, func(t *testing.T) { 53 require := require.New(t) 54 serialized := StringONR(tc.objectFormat) 55 require.Equal(tc.serialized, serialized) 56 }) 57 } 58 } 59 60 func TestParseONR(t *testing.T) { 61 for _, tc := range onrTestCases { 62 tc := tc 63 t.Run(tc.serialized, func(t *testing.T) { 64 require := require.New(t) 65 66 parsed := ParseONR(tc.serialized) 67 require.Equal(tc.objectFormat, parsed) 68 }) 69 } 70 } 71 72 var subjectOnrTestCases = []struct { 73 serialized string 74 objectFormat *core.ObjectAndRelation 75 }{ 76 { 77 serialized: "tenant/testns:testobj#testrel", 78 objectFormat: ObjectAndRelation("tenant/testns", "testobj", "testrel"), 79 }, 80 { 81 serialized: "tenant/testns:testobj#...", 82 objectFormat: ObjectAndRelation("tenant/testns", "testobj", "..."), 83 }, 84 { 85 serialized: "tenant/testns:*#...", 86 objectFormat: ObjectAndRelation("tenant/testns", "*", "..."), 87 }, 88 { 89 serialized: "tenant/testns:testobj", 90 objectFormat: ObjectAndRelation("tenant/testns", "testobj", "..."), 91 }, 92 { 93 serialized: "tenant/testns:veryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryverylong", 94 objectFormat: ObjectAndRelation("tenant/testns", "veryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryverylong", "..."), 95 }, 96 { 97 serialized: "tenant/testns:-base64YWZzZGZh-ZHNmZHPwn5iK8J+YivC/fmIrwn5iK==", 98 objectFormat: ObjectAndRelation("tenant/testns", "-base64YWZzZGZh-ZHNmZHPwn5iK8J+YivC/fmIrwn5iK==", "..."), 99 }, 100 { 101 serialized: "tenant/testns:testobj#", 102 objectFormat: nil, 103 }, 104 { 105 serialized: "tenant/testns:testobj:", 106 objectFormat: nil, 107 }, 108 { 109 serialized: "", 110 objectFormat: nil, 111 }, 112 } 113 114 func TestParseSubjectONR(t *testing.T) { 115 for _, tc := range subjectOnrTestCases { 116 tc := tc 117 t.Run(tc.serialized, func(t *testing.T) { 118 require := require.New(t) 119 120 parsed := ParseSubjectONR(tc.serialized) 121 require.Equal(tc.objectFormat, parsed) 122 }) 123 } 124 }