Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add some invalid schema tests as per a recently reported error #1713

Merged
merged 1 commit into from
Jan 18, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 22 additions & 0 deletions internal/services/v1/schema_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -563,3 +563,25 @@ func TestSchemaUnchangedNamespaces(t *testing.T) {

require.True(t, docRevision.GreaterThan(userRevision))
}

func TestSchemaInvalid(t *testing.T) {
conn, cleanup, _, _ := testserver.NewTestServer(require.New(t), 0, memdb.DisableGC, false, tf.EmptyDatastore)
t.Cleanup(cleanup)
client := v1.NewSchemaServiceClient(conn)

// Write a schema that references an invalid type.
_, err := client.WriteSchema(context.Background(), &v1.WriteSchemaRequest{
Schema: `definition org {
relation admin: user
relation member: user

permission read = admin + member
permission create = admin
permission update = admin
permission delete = admin
permission * = read + create + update + delete // <= crash case
}`,
})
grpcutil.RequireStatus(t, codes.InvalidArgument, err)
require.ErrorContains(t, err, "found token TokenTypeStar")
}
1 change: 1 addition & 0 deletions pkg/schemadsl/parser/parser_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,7 @@ func TestParser(t *testing.T) {
{"invalid caveat expr test", "invalidcaveatexpr"},
{"associativity test", "associativity"},
{"super large test", "superlarge"},
{"invalid permission name test", "invalid_perm_name"},
}

for _, test := range parserTests {
Expand Down
10 changes: 10 additions & 0 deletions pkg/schemadsl/parser/tests/invalid_perm_name.zed
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
definition org {
relation admin: user
relation member: user

permission read = admin + member
permission create = admin
permission update = admin
permission delete = admin
permission * = read + create + update + delete
}
121 changes: 121 additions & 0 deletions pkg/schemadsl/parser/tests/invalid_perm_name.zed.expected
Original file line number Diff line number Diff line change
@@ -0,0 +1,121 @@
NodeTypeFile
end-rune = 209
input-source = invalid permission name test
start-rune = 0
child-node =>
NodeTypeDefinition
definition-name = org
end-rune = 209
input-source = invalid permission name test
start-rune = 0
child-node =>
NodeTypeRelation
end-rune = 40
input-source = invalid permission name test
relation-name = admin
start-rune = 21
allowed-types =>
NodeTypeTypeReference
end-rune = 40
input-source = invalid permission name test
start-rune = 37
type-ref-type =>
NodeTypeSpecificTypeReference
end-rune = 40
input-source = invalid permission name test
start-rune = 37
type-name = user
NodeTypeRelation
end-rune = 66
input-source = invalid permission name test
relation-name = member
start-rune = 46
allowed-types =>
NodeTypeTypeReference
end-rune = 66
input-source = invalid permission name test
start-rune = 63
type-ref-type =>
NodeTypeSpecificTypeReference
end-rune = 66
input-source = invalid permission name test
start-rune = 63
type-name = user
NodeTypePermission
end-rune = 104
input-source = invalid permission name test
relation-name = read
start-rune = 73
compute-expression =>
NodeTypeUnionExpression
end-rune = 104
input-source = invalid permission name test
start-rune = 91
left-expr =>
NodeTypeIdentifier
end-rune = 95
identifier-value = admin
input-source = invalid permission name test
start-rune = 91
right-expr =>
NodeTypeIdentifier
end-rune = 104
identifier-value = member
input-source = invalid permission name test
start-rune = 99
NodeTypePermission
end-rune = 134
input-source = invalid permission name test
relation-name = create
start-rune = 110
compute-expression =>
NodeTypeIdentifier
end-rune = 134
identifier-value = admin
input-source = invalid permission name test
start-rune = 130
NodeTypePermission
end-rune = 164
input-source = invalid permission name test
relation-name = update
start-rune = 140
compute-expression =>
NodeTypeIdentifier
end-rune = 164
identifier-value = admin
input-source = invalid permission name test
start-rune = 160
NodeTypePermission
end-rune = 194
input-source = invalid permission name test
relation-name = delete
start-rune = 170
compute-expression =>
NodeTypeIdentifier
end-rune = 194
identifier-value = admin
input-source = invalid permission name test
start-rune = 190
NodeTypePermission
end-rune = 209
input-source = invalid permission name test
start-rune = 200
child-node =>
NodeTypeError
end-rune = 209
error-message = Expected identifier, found token TokenTypeStar
error-source = *
input-source = invalid permission name test
start-rune = 211
NodeTypeError
end-rune = 209
error-message = Expected end of statement or definition, found: TokenTypeStar
error-source = *
input-source = invalid permission name test
start-rune = 211
NodeTypeError
end-rune = 209
error-message = Unexpected token at root level: TokenTypeStar
error-source = *
input-source = invalid permission name test
start-rune = 211