From 19aa1761f27c950bc28918a655376b3f2c329a4c Mon Sep 17 00:00:00 2001 From: Pontus Melke Date: Fri, 12 Jan 2018 08:38:13 +0100 Subject: [PATCH] Update test mocks --- .../org/neo4j/internal/kernel/api/Node.java | 56 +++++++++++ .../internal/kernel/api/StubNodeCursor.java | 50 ---------- .../kernel/api/StubNodeLabelIndexCursor.java | 95 +++++++++++++++++++ .../neo4j/internal/kernel/api/StubRead.java | 2 +- .../v3_4/codegen/CodeGeneratorTest.scala | 32 +++---- 5 files changed, 163 insertions(+), 72 deletions(-) create mode 100644 community/kernel-api/src/test/java/org/neo4j/internal/kernel/api/Node.java create mode 100644 community/kernel-api/src/test/java/org/neo4j/internal/kernel/api/StubNodeLabelIndexCursor.java diff --git a/community/kernel-api/src/test/java/org/neo4j/internal/kernel/api/Node.java b/community/kernel-api/src/test/java/org/neo4j/internal/kernel/api/Node.java new file mode 100644 index 0000000000000..5e4885988157f --- /dev/null +++ b/community/kernel-api/src/test/java/org/neo4j/internal/kernel/api/Node.java @@ -0,0 +1,56 @@ +package org.neo4j.internal.kernel.api; + +import java.util.Map; + +import org.neo4j.values.storable.Value; + +class Node +{ + final long id; + private final long[] labels; + final Map properties; + + Node( long id, long[] labels, Map properties ) + { + this.id = id; + this.labels = labels; + this.properties = properties; + } + + LabelSet labelSet() + { + return new LabelSet() + { + @Override + public int numberOfLabels() + { + return labels.length; + } + + @Override + public int label( int offset ) + { + return labels.length; + } + + @Override + public boolean contains( int labelToken ) + { + for ( long label : labels ) + { + if ( label == labelToken ) + { + return true; + } + } + return false; + } + + @Override + public long[] all() + { + return labels; + } + }; + } +} diff --git a/community/kernel-api/src/test/java/org/neo4j/internal/kernel/api/StubNodeCursor.java b/community/kernel-api/src/test/java/org/neo4j/internal/kernel/api/StubNodeCursor.java index fcb934ca17bed..ef9ababdc8f13 100644 --- a/community/kernel-api/src/test/java/org/neo4j/internal/kernel/api/StubNodeCursor.java +++ b/community/kernel-api/src/test/java/org/neo4j/internal/kernel/api/StubNodeCursor.java @@ -158,54 +158,4 @@ public boolean isClosed() return false; } - static class Node - { - final long id; - final long[] labels; - final Map properties; - - Node( long id, long[] labels, Map properties ) - { - this.id = id; - this.labels = labels; - this.properties = properties; - } - - LabelSet labelSet() - { - return new LabelSet() - { - @Override - public int numberOfLabels() - { - return labels.length; - } - - @Override - public int label( int offset ) - { - return labels.length; - } - - @Override - public boolean contains( int labelToken ) - { - for ( long label : labels ) - { - if ( label == labelToken ) - { - return true; - } - } - return false; - } - - @Override - public long[] all() - { - return labels; - } - }; - } - } } diff --git a/community/kernel-api/src/test/java/org/neo4j/internal/kernel/api/StubNodeLabelIndexCursor.java b/community/kernel-api/src/test/java/org/neo4j/internal/kernel/api/StubNodeLabelIndexCursor.java new file mode 100644 index 0000000000000..912b8f0114b28 --- /dev/null +++ b/community/kernel-api/src/test/java/org/neo4j/internal/kernel/api/StubNodeLabelIndexCursor.java @@ -0,0 +1,95 @@ +/* + * Copyright (c) 2002-2018 "Neo Technology," + * Network Engine for Objects in Lund AB [http://neotechnology.com] + * + * This file is part of Neo4j. + * + * Neo4j is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.neo4j.internal.kernel.api; + +import java.util.Map; + +public class StubNodeLabelIndexCursor implements NodeLabelIndexCursor +{ + private int offset = -1; + private final Map lookup; + private int label; + + public StubNodeLabelIndexCursor( Map lookup ) + { + this.lookup = lookup; + } + + void initalize(int label) + { + this.label = label; + this.offset = -1; + } + + + @Override + public void node( NodeCursor cursor ) + { + + } + + @Override + public long nodeReference() + { + long[] nodes = lookup.get( label ); + if ( nodes == null ) + { + return -1L; + } + + return offset >= 0 && offset < nodes.length ? nodes[offset] : -1; + } + + @Override + public LabelSet labels() + { + return null; + } + + + @Override + public boolean next() + { + long[] nodes = lookup.get( label ); + if ( nodes == null ) + { + return false; + } + return ++offset < nodes.length; + } + + @Override + public boolean shouldRetry() + { + return false; + } + + @Override + public void close() + { + + } + + @Override + public boolean isClosed() + { + return false; + } +} diff --git a/community/kernel-api/src/test/java/org/neo4j/internal/kernel/api/StubRead.java b/community/kernel-api/src/test/java/org/neo4j/internal/kernel/api/StubRead.java index 501945e7304c8..5726850eb44eb 100644 --- a/community/kernel-api/src/test/java/org/neo4j/internal/kernel/api/StubRead.java +++ b/community/kernel-api/src/test/java/org/neo4j/internal/kernel/api/StubRead.java @@ -40,7 +40,7 @@ public void nodeIndexScan( IndexReference index, NodeValueIndexCursor cursor, In @Override public void nodeLabelScan( int label, NodeLabelIndexCursor cursor ) { - throw new UnsupportedOperationException(); + ((StubNodeLabelIndexCursor) cursor).initalize( label ); } @Override diff --git a/enterprise/cypher/cypher/src/test/scala/org/neo4j/cypher/internal/compiled_runtime/v3_4/codegen/CodeGeneratorTest.scala b/enterprise/cypher/cypher/src/test/scala/org/neo4j/cypher/internal/compiled_runtime/v3_4/codegen/CodeGeneratorTest.scala index 06c21c2b0eed7..da4a41826acfe 100644 --- a/enterprise/cypher/cypher/src/test/scala/org/neo4j/cypher/internal/compiled_runtime/v3_4/codegen/CodeGeneratorTest.scala +++ b/enterprise/cypher/cypher/src/test/scala/org/neo4j/cypher/internal/compiled_runtime/v3_4/codegen/CodeGeneratorTest.scala @@ -53,7 +53,7 @@ import org.neo4j.time.Clocks import org.neo4j.values.AnyValue import org.neo4j.values.storable._ import org.neo4j.values.virtual.VirtualValues.EMPTY_MAP -import org.neo4j.values.virtual.{RelationshipValue, ListValue, MapValue, NodeValue} +import org.neo4j.values.virtual.{ListValue, MapValue, NodeValue, RelationshipValue} import scala.collection.JavaConverters._ import scala.collection.{JavaConverters, mutable} @@ -1677,6 +1677,13 @@ abstract class CodeGeneratorTest extends CypherFunSuite with LogicalPlanningTest else cursor.withNode(n.getId)) cursor } + + private def nodeLabelIndexCursor() = { + val lookup: util.Map[Integer, Array[Long]] = labelTokens.map { + case (label, token) => Int.box(token) -> nodesForLabel(label).map(_.getId).toArray + }.asJava + new StubNodeLabelIndexCursor(lookup) + } private def propertyCursor() = new StubPropertyCursor @@ -1687,6 +1694,9 @@ abstract class CodeGeneratorTest extends CypherFunSuite with LogicalPlanningTest when(cursors.allocatePropertyCursor()).thenAnswer(new Answer[PropertyCursor] { override def answer(invocation: InvocationOnMock): PropertyCursor = propertyCursor() }) + when(cursors.allocateNodeLabelIndexCursor()).thenAnswer(new Answer[NodeLabelIndexCursor] { + override def answer(invocation: InvocationOnMock): NodeLabelIndexCursor = nodeLabelIndexCursor() + }) when(transactionalContext.cursors).thenReturn(cursors) private def read = new StubRead @@ -1694,16 +1704,6 @@ abstract class CodeGeneratorTest extends CypherFunSuite with LogicalPlanningTest override def answer(invocation: InvocationOnMock): Read = read }) when(queryContext.entityAccessor).thenReturn(nodeManager) - when(ro.nodeGetProperty(anyLong(), anyInt())).thenAnswer(new Answer[Value] { - override def answer(invocationOnMock: InvocationOnMock): Value = { - val id = invocationOnMock.getArguments()(0).asInstanceOf[Long] - if (id < 3) Values.stringValue("value") - else null - } - }) - when(ro.nodesGetAll()).thenAnswer(new Answer[PrimitiveLongIterator] { - override def answer(invocationOnMock: InvocationOnMock): PrimitiveLongIterator = primitiveIterator(allNodes.map(_.getId)) - }) when(ro.labelGetForName(anyString())).thenAnswer(new Answer[Int] { override def answer(invocationOnMock: InvocationOnMock): Int = { val label = invocationOnMock.getArguments.apply(0).asInstanceOf[String] @@ -1716,16 +1716,6 @@ abstract class CodeGeneratorTest extends CypherFunSuite with LogicalPlanningTest relTokens(label) } }) - when(ro.nodesGetForLabel(anyInt())).thenAnswer(new Answer[PrimitiveLongResourceIterator] { - override def answer(invocationOnMock: InvocationOnMock): PrimitiveLongResourceIterator = { - val labelToken = invocationOnMock.getArguments.apply(0).asInstanceOf[Int] - val (label, _) = labelTokens.find { - case (l, t) => t == labelToken - }.get - val nodeIds = nodesForLabel(label).map(_.getId) - primitiveResourceIterator(null, nodeIds) - } - }) when(ro.nodeGetRelationships(anyLong(), any[Direction])).thenAnswer(new Answer[PrimitiveLongIterator] { override def answer(invocationOnMock: InvocationOnMock): PrimitiveLongIterator = { val node = invocationOnMock.getArguments.apply(0).asInstanceOf[Long].toInt