Skip to content

Commit

Permalink
Update security testing infrastructure
Browse files Browse the repository at this point in the history
  • Loading branch information
pontusmelke committed Aug 21, 2017
1 parent bace749 commit 6b4c3b1
Show file tree
Hide file tree
Showing 13 changed files with 301 additions and 115 deletions.
Expand Up @@ -23,14 +23,16 @@ import org.neo4j.cypher.internal.compatibility.v3_3.runtime.ExecutionContext
import org.neo4j.cypher.internal.compatibility.v3_3.runtime.pipes.QueryState
import org.neo4j.cypher.internal.frontend.v3_3.ParameterWrongTypeException
import org.neo4j.values.AnyValue
import org.neo4j.values.storable.Values
import org.neo4j.values.virtual.{NodeValue, VirtualValues}

case class LabelsFunction(nodeExpr: Expression) extends NullInNullOutExpression(nodeExpr) {

override def compute(value: AnyValue, m: ExecutionContext)
(implicit state: QueryState): AnyValue = value match {
case n: NodeValue =>
VirtualValues.fromArray(n.labels())
val ctx = state.query
VirtualValues.list(ctx.getLabelsForNode(n.id()).map(t => Values.stringValue(ctx.getLabelName(t))).toArray:_*)
case x => throw new ParameterWrongTypeException("Expected a Node, got: " + x)
}

Expand Down
Expand Up @@ -32,10 +32,10 @@ import org.neo4j.cypher.internal.spi.v3_3.QueryContext
import org.neo4j.cypher.internal.{InternalExecutionResult, QueryStatistics}
import org.neo4j.graphdb.Notification
import org.neo4j.graphdb.spatial.{Geometry, Point}
import org.neo4j.values.AnyValues.{asMapValue, asPathValue, asPointValue}
import org.neo4j.values.AnyValues._
import org.neo4j.values.result.QueryResult.{QueryResultVisitor, Record}
import org.neo4j.values.storable.Values
import org.neo4j.values.storable.Values.{doubleValue, longValue, stringValue}
import org.neo4j.values.storable.Values.{of => _, _}
import org.neo4j.values.virtual.VirtualValues.{fromNodeProxy, fromRelationshipProxy}
import org.neo4j.values.{AnyValue, AnyValues}

Expand Down Expand Up @@ -104,12 +104,14 @@ class ProcedureExecutionResult[E <: Exception](context: QueryContext,
case CTPath => transform(res(i), asPathValue)
case CTInteger => transform(res(i), longValue)
case CTFloat => transform(res(i), doubleValue)
case CTNumber => transform(res(i), numberValue)
case CTString => transform(res(i), stringValue)
case CTBoolean => transform(res(i), Values.booleanValue)
case CTBoolean => transform(res(i), booleanValue)
case CTPoint => transform(res(i), (p: Point) => asPointValue(p))
case CTGeometry => transform(res(i), (g: Geometry) => asPointValue(g))
case CTMap => transform(res(i), asMapValue)
case ListType(_) => transform(res(i), AnyValues.asListValue)
case ListType(_) => transform(res(i), asListValue)
case CTAny => transform(res(i), AnyValues.of)
}
}
visitor.visit(new Record {
Expand Down
Expand Up @@ -86,7 +86,7 @@ public void calls_procedures_with_simple_input_type_returning_record_with_primit
Session session = driver.session() )
{

assertThat( session.run( "CALL " + procedureNamespace + ".simpleInput11('string')" ).single() ).isNotNull();
assertThat( session.run( "CALL " + procedureNamespace + ".simpleInput11('string') YIELD field04 AS p RETURN p" ).single() ).isNotNull();
assertThat( session.run( "CALL " + procedureNamespace + ".simpleInput12(42)" ).single() ).isNotNull();
assertThat( session.run( "CALL " + procedureNamespace + ".simpleInput13(42)" ).single() ).isNotNull();
assertThat( session.run( "CALL " + procedureNamespace + ".simpleInput14(4.2)" ).single() ).isNotNull();
Expand Down
Expand Up @@ -90,7 +90,7 @@ public void shouldChangeOwnPassword() throws Throwable
// Because RESTSubject caches an auth token that is sent with every request
neo.updateAuthToken( readSubject, "readSubject", "321" );
neo.assertAuthenticated( readSubject );
testSuccessfulRead( readSubject, 3 );
testSuccessfulRead( readSubject, 3L );
}

@Test
Expand Down Expand Up @@ -158,13 +158,13 @@ public void shouldChangeUserPasswordIfSameUser() throws Throwable
// Because RESTSubject caches an auth token that is sent with every request
neo.updateAuthToken( readSubject, "readSubject", "321" );
neo.assertAuthenticated( readSubject );
testSuccessfulRead( readSubject, 3 );
testSuccessfulRead( readSubject, 3L );

assertEmpty( adminSubject, "CALL dbms.security.changeUserPassword( 'adminSubject', 'cba', false )" );
// Because RESTSubject caches an auth token that is sent with every request
neo.updateAuthToken( adminSubject, "adminSubject", "cba" );
neo.assertAuthenticated( adminSubject );
testSuccessfulRead( adminSubject, 3 );
testSuccessfulRead( adminSubject, 3L );
}

// Should fail nicely to change own password for non-admin or admin subject if password invalid
Expand Down Expand Up @@ -987,7 +987,7 @@ public void shouldSetCorrectNoRolePermissions() throws Exception
@Test
public void shouldSetCorrectReaderPermissions() throws Exception
{
testSuccessfulRead( readSubject, 3 );
testSuccessfulRead( readSubject, 3L );
testFailWrite( readSubject );
testFailTokenWrite( readSubject, WRITE_OPS_NOT_ALLOWED );
testFailSchema( readSubject );
Expand All @@ -998,7 +998,7 @@ public void shouldSetCorrectReaderPermissions() throws Exception
@Test
public void shouldSetCorrectEditorPermissions() throws Exception
{
testSuccessfulRead( editorSubject, 3 );
testSuccessfulRead( editorSubject, 3L );
testSuccessfulWrite( editorSubject );
testFailTokenWrite( editorSubject );
testFailSchema( editorSubject );
Expand All @@ -1009,7 +1009,7 @@ public void shouldSetCorrectEditorPermissions() throws Exception
@Test
public void shouldSetCorrectPublisherPermissions() throws Exception
{
testSuccessfulRead( writeSubject, 3 );
testSuccessfulRead( writeSubject, 3L );
testSuccessfulWrite( writeSubject );
testSuccessfulTokenWrite( writeSubject );
testFailSchema( writeSubject );
Expand All @@ -1020,7 +1020,7 @@ public void shouldSetCorrectPublisherPermissions() throws Exception
@Test
public void shouldSetCorrectSchemaPermissions() throws Exception
{
testSuccessfulRead( schemaSubject, 3 );
testSuccessfulRead( schemaSubject, 3L );
testSuccessfulWrite( schemaSubject );
testSuccessfulTokenWrite( schemaSubject );
testSuccessfulSchema( schemaSubject );
Expand All @@ -1031,7 +1031,7 @@ public void shouldSetCorrectSchemaPermissions() throws Exception
@Test
public void shouldSetCorrectAdminPermissions() throws Exception
{
testSuccessfulRead( adminSubject, 3 );
testSuccessfulRead( adminSubject, 3L );
testSuccessfulWrite( adminSubject );
testSuccessfulTokenWrite( adminSubject );
testSuccessfulSchema( adminSubject );
Expand All @@ -1044,7 +1044,7 @@ public void shouldSetCorrectMultiRolePermissions() throws Exception
{
assertEmpty( adminSubject, "CALL dbms.security.addRoleToUser('" + READER + "', 'schemaSubject')" );

testSuccessfulRead( schemaSubject, 3 );
testSuccessfulRead( schemaSubject, 3L );
testSuccessfulWrite( schemaSubject );
testSuccessfulSchema( schemaSubject );
testFailCreateUser( schemaSubject, PERMISSION_DENIED );
Expand Down

0 comments on commit 6b4c3b1

Please sign in to comment.