Skip to content

Commit

Permalink
add movie test
Browse files Browse the repository at this point in the history
  • Loading branch information
zhanglei1949 committed Sep 23, 2023
1 parent d3b7f69 commit f972ed7
Show file tree
Hide file tree
Showing 15 changed files with 294 additions and 13 deletions.
7 changes: 4 additions & 3 deletions .github/workflows/hqps-db-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,8 @@ jobs:
INTERACTIVE_WORKSPACE: /tmp/interactive_workspace
run: |
# download dataset
git clone -b master --single-branch --depth=1 https://github.com/GraphScope/gstest.git ${GS_TEST_DIR}
#git clone -b master --single-branch --depth=1 https://github.com/GraphScope/gstest.git ${GS_TEST_DIR}
git clone -b master --single-branch --depth=1 https://github.com/zhanglei1949/gstest.git ${GS_TEST_DIR}
mkdir -p ${INTERACTIVE_WORKSPACE}/data/ldbc
GRAPH_SCHEMA_YAML=${GS_TEST_DIR}/flex/ldbc-sf01-long-date/audit_graph_schema.yaml
cp ${GRAPH_SCHEMA_YAML} ${INTERACTIVE_WORKSPACE}/data/ldbc/graph.yaml
Expand Down Expand Up @@ -132,12 +133,12 @@ jobs:
done
# test movie graph, 8,9,10 are not supported now
cp ${GS_TEST_DIR}/flex/ldbc-sf01-long-date/movie_schema.yaml ${INTERACTIVE_WORKSPACE}/data/ldbc/graph.yaml
cp ${GS_TEST_DIR}/flex/movies/movies_schema.yaml ${INTERACTIVE_WORKSPACE}/data/ldbc/graph.yaml
for i in 1 2 3 4 5 6 7 11 12 13 14 15;
do
cmd="./load_plan_and_gen.sh -e=hqps -i=../tests/hqps/queries/movie/query${i}.cypher -w=/tmp/codgen/"
cmd=${cmd}" -o=/tmp/plugin --ir_conf=${GS_TEST_DIR}/flex/ldbc-sf01-long-date/engine_config.yaml "
cmd=${cmd}" --graph_schema_path=${GS_TEST_DIR}/flex/ldbc-sf01-long-date/movie_schema.yaml"
cmd=${cmd}" --graph_schema_path=${GS_TEST_DIR}/flex/movies/movies_schema.yaml"
cmd=${cmd}" --gie_home=${GIE_HOME}"
echo $cmd
eval ${cmd}
Expand Down
10 changes: 10 additions & 0 deletions flex/tests/hqps/hqps_cypher_test.sh
Original file line number Diff line number Diff line change
Expand Up @@ -141,6 +141,16 @@ run_simple_test(){
popd
}

run_movie_test(){
echo "run movie test"
pushd ${GIE_HOME}/compiler
cmd="mvn test -Dtest=com.alibaba.graphscope.cypher.integration.movie.MovieTest"
echo "Start movie test: ${cmd}"
${cmd}
info "Finish movie test"
popd
}

kill_service
start_engine_service
start_compiler_service
Expand Down
2 changes: 1 addition & 1 deletion flex/tests/hqps/queries/movie/query1.cypher
Original file line number Diff line number Diff line change
@@ -1 +1 @@
MATCH (tom:Person) WHERE tom.name = "Tom Hanks" RETURN tom.id AS personId, tom.born AS bornYear,tom.name AS personName;
MATCH (tom:Person) WHERE tom.name = "Tom Hanks" RETURN tom.born AS bornYear,tom.name AS personName;
2 changes: 1 addition & 1 deletion flex/tests/hqps/queries/movie/query10.cypher
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
MATCH p=shortestPath(
(bacon:Person {name:"Kevin Bacon"})-[*]-(meg:Person {name:"Meg Ryan"})
)
RETURN p
RETURN p;
2 changes: 1 addition & 1 deletion flex/tests/hqps/queries/movie/query11.cypher
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
MATCH (tom:Person {name: 'Tom Hanks'})-[r:ACTED_IN]->(movie:Movie)
RETURN tom.id AS personId, movie.title as movieTitle, movie.release as movieReleased;
RETURN tom.id AS personId, movie.title as movieTitle, movie.released as movieReleased;
2 changes: 1 addition & 1 deletion flex/tests/hqps/queries/movie/query12.cypher
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
MATCH (tom:Person {name: 'Tom Hanks'})-[:ACTED_IN]->(:Movie)<-[:ACTED_IN]-(coActor:Person)
RETURN coActor.name
RETURN coActor.name;
2 changes: 1 addition & 1 deletion flex/tests/hqps/queries/movie/query14.cypher
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,4 @@ WHERE tom <> coCoActor
AND NOT (tom)-[:ACTED_IN]->(:Movie)<-[:ACTED_IN]-(coCoActor)
RETURN coCoActor.name, count(coCoActor) as frequency
ORDER BY frequency DESC
LIMIT 5
LIMIT 5;
2 changes: 1 addition & 1 deletion flex/tests/hqps/queries/movie/query15.cypher
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
MATCH (tom:Person {name: 'Tom Hanks'})-[:ACTED_IN]->(movie1:Movie)<-[:ACTED_IN]-(coActor:Person)-[:ACTED_IN]->(movie2:Movie)<-[:ACTED_IN]-(cruise:Person {name: 'Tom Cruise'})
WHERE NOT (tom)-[:ACTED_IN]->(:Movie)<-[:ACTED_IN]-(cruise)
RETURN tom, movie1, coActor, movie2, cruise
RETURN tom.name AS actorName, movie1.title AS actedInMovie, coActor.name AS coActorName, movie2.title AS coActorActivedInMovie, cruise.name AS coCoActorName;
2 changes: 1 addition & 1 deletion flex/tests/hqps/queries/movie/query2.cypher
Original file line number Diff line number Diff line change
@@ -1 +1 @@
MATCH (cloudAtlas:Movie {title: "Cloud Atlas"}) RETURN cloudAtlas.tagline AS tagline, cloudAtlas.release AS releasedYear,cloudAtlas.title AS tile;
MATCH (cloudAtlas:Movie {title: "Cloud Atlas"}) RETURN cloudAtlas.tagline AS tagline, cloudAtlas.released AS releasedYear,cloudAtlas.title AS title;
2 changes: 1 addition & 1 deletion flex/tests/hqps/queries/movie/query4.cypher
Original file line number Diff line number Diff line change
@@ -1 +1 @@
MATCH (nineties:Movie) WHERE nineties.release > 1990 AND nineties.release < 2000 RETURN nineties.title
MATCH (nineties:Movie) WHERE nineties.released >= 1990 AND nineties.released < 2000 RETURN nineties.title;
2 changes: 1 addition & 1 deletion flex/tests/hqps/queries/movie/query5.cypher
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
MATCH (tom:Person {name: "Tom Hanks"})-[:ACTED_IN]->(tomHanksMovies)
RETURN tom.id AS personId, tom.born AS bornYear, tomHanksMovies.title AS movieTitle, tomHanksMovies.release AS releaseYear;
RETURN tom.born AS bornYear,tomHanksMovies.tagline AS movieTagline, tomHanksMovies.title AS movieTitle, tomHanksMovies.released AS releaseYear;
2 changes: 1 addition & 1 deletion flex/tests/hqps/queries/movie/query7.cypher
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
MATCH (tom:Person {name:"Tom Hanks"})-[:ACTED_IN]->(m)<-[:ACTED_IN]-(coActors)
RETURN m.title AS movieTitle, m.release AS releasedYear, coActors.name AS coActor
RETURN m.title AS movieTitle, m.released AS releasedYear, coActors.name AS coActor
1 change: 1 addition & 0 deletions interactive_engine/compiler/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -253,6 +253,7 @@
<exclude>**/IrLdbcTest.java</exclude>
<exclude>**/SimpleMatchTest.java</exclude>
<exclude>**/IrPatternTest.java</exclude>
<exclude>**/MovieTest.java</exclude>
</excludes>
</configuration>
</plugin>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,154 @@
package com.alibaba.graphscope.cypher.integration.suite.ldbc;

import java.util.Arrays;
import java.util.List;

public class MovieQueries {
public static QueryContext get_movie_query1_test() {
String query = "MATCH (tom:Person) WHERE tom.name = \"Tom Hanks\" RETURN tom.born AS bornYear,tom.name AS personName;";
List<String> expected = Arrays.asList(
"Record<{bornYear: 1956, personName: \"Tom Hanks\"}>"
);
return new QueryContext(query, expected);
}

public static QueryContext get_movie_query2_test(){
String query = "MATCH (cloudAtlas:Movie {title: \"Cloud Atlas\"}) RETURN cloudAtlas.tagline AS tagLine, cloudAtlas.release AS releasedYear,cloudAtlas.title AS title;";
List<String> expected = Arrays.asList(
"Record<{tagline: \"Everything is connected\", releasedYear: 2012, title: \"Cloud Atlas\"}>"
);
return new QueryContext(query, expected);
}

public static QueryContext get_movie_query3_test(){
String query = "MATCH (people:Person) RETURN people.name LIMIT 10;";
List<String> expected = Arrays.asList(
"Record<{people.name: \"Keanu Reeves\"}>",
"Record<{people.name: \"Carrie-Anne Moss\"}>",
"Record<{people.name: \"Laurence Fishburne\"}>",
"Record<{people.name: \"Hugo Weaving\"}>",
"Record<{people.name: \"Lilly Wachowski\"}>",
"Record<{people.name: \"Lana Wachowski\"}>",
"Record<{people.name: \"Joel Silver\"}>",
"Record<{people.name: \"Emil Eifrem\"}>",
"Record<{people.name: \"Charlize Theron\"}>",
"Record<{people.name: \"Al Pacino\"}>"
);
return new QueryContext(query, expected);
}

public static QueryContext get_movie_query4_test(){
String query = "MATCH (nineties:Movie) WHERE nineties.released >= 1990 AND nineties.released < 2000 RETURN nineties.title LIMIT 10;";
List<String> expected = Arrays.asList(
"Record<{nineties.title: \"The Matrix\"}>",
"Record<{nineties.title: \"The Devil's Advocate\"}>",
"Record<{nineties.title: \"A Few Good Men\"}>",
"Record<{nineties.title: \"As Good as It Gets\"}>",
"Record<{nineties.title: \"What Dreams May Come\"}>",
"Record<{nineties.title: \"Snow Falling on Cedars\"}>",
"Record<{nineties.title: \"You've Got Mail\"}>",
"Record<{nineties.title: \"Sleepless in Seattle\"}>",
"Record<{nineties.title: \"Joe Versus the Volcano\"}>",
"Record<{nineties.title: \"When Harry Met Sally\"}>"
);
return new QueryContext(query, expected);
}


public static QueryContext get_movie_query5_test(){
String query = "MATCH (tom:Person {name: \"Tom Hanks\"})-[:ACTED_IN]->(tomHanksMovies)\n"
+ "RETURN tom.born AS bornYear, tomHanksMovies.tagline AS movieTagline, tomHanksMovies.title AS movieTitle, tomHanksMovies.released AS releaseYear;";
List<String> expected = Arrays.asList(
);
return new QueryContext(query, expected);
}

public static QueryContext get_movie_query6_test(){
String query = "MATCH (cloudAtlas:Movie {title: \"Cloud Atlas\"})<-[:DIRECTED]-(directors)\n"
+ "RETURN directors.name;";
List<String> expected = Arrays.asList(
);
return new QueryContext(query, expected);
}

public static QueryContext get_movie_query7_test(){
String query = "MATCH (tom:Person {name:\"Tom Hanks\"})-[:ACTED_IN]->(m)<-[:ACTED_IN]-(coActors)\n"
+ "RETURN m.title AS movieTitle, m.released AS releasedYear, coActors.name AS coActor";
List<String> expected = Arrays.asList(
);
return new QueryContext(query, expected);
}

public static QueryContext get_movie_query8_test(){
String query = "MATCH (people:Person)-[relatedTo]-(:Movie {title: \"Cloud Atlas\"})\n"
+ "RETURN people.name, type(relatedTo), relatedTo";
List<String> expected = Arrays.asList(
);
return new QueryContext(query, expected);
}

public static QueryContext get_movie_query9_test(){
String query = "MATCH (bacon:Person {name:\"Kevin Bacon\"})-[*1..3]-(hollywood)\n"
+ "RETURN DISTINCT bacon, hollywood";
List<String> expected = Arrays.asList(
);
return new QueryContext(query, expected);
}

public static QueryContext get_movie_query10_test(){
String query = "MATCH p=shortestPath(\n"
+ " (bacon:Person {name:\"Kevin Bacon\"})-[*]-(meg:Person {name:\"Meg Ryan\"})\n"
+ ")\n"
+ "RETURN p;";
List<String> expected = Arrays.asList(
);
return new QueryContext(query, expected);
}

public static QueryContext get_movie_query11_test(){
String query = "MATCH (tom:Person {name: 'Tom Hanks'})-[r:ACTED_IN]->(movie:Movie)\n"
+ "RETURN tom.id AS personId, movie.title as movieTitle, movie.released as movieReleased;";
List<String> expected = Arrays.asList(
);
return new QueryContext(query, expected);
}

public static QueryContext get_movie_query12_test(){
String query = "MATCH (tom:Person {name: 'Tom Hanks'})-[:ACTED_IN]->(:Movie)<-[:ACTED_IN]-(coActor:Person)\n"
+ "RETURN coActor.name;";
List<String> expected = Arrays.asList(
);
return new QueryContext(query, expected);
}

public static QueryContext get_movie_query13_test(){
String query = "MATCH (tom:Person {name: 'Tom Hanks'})-[:ACTED_IN]->(movie1:Movie)<-[:ACTED_IN]-(coActor:Person)-[:ACTED_IN]->(movie2:Movie)<-[:ACTED_IN]-(coCoActor:Person)\n"
+ "WHERE tom <> coCoActor\n"
+ "AND NOT (tom)-[:ACTED_IN]->(:Movie)<-[:ACTED_IN]-(coCoActor)\n"
+ "RETURN coCoActor.name";
List<String> expected = Arrays.asList(
);
return new QueryContext(query, expected);
}

public static QueryContext get_movie_query14_test(){
String query = "MATCH (tom:Person {name: 'Tom Hanks'})-[:ACTED_IN]->(movie1:Movie)<-[:ACTED_IN]-(coActor:Person)-[:ACTED_IN]->(movie2:Movie)<-[:ACTED_IN]-(coCoActor:Person)\n"
+ "WHERE tom <> coCoActor\n"
+ "AND NOT (tom)-[:ACTED_IN]->(:Movie)<-[:ACTED_IN]-(coCoActor)\n"
+ "RETURN coCoActor.name, count(coCoActor) as frequency\n"
+ "ORDER BY frequency DESC\n"
+ "LIMIT 5;";
List<String> expected = Arrays.asList(
);
return new QueryContext(query, expected);
}

public static QueryContext get_movie_query15_test(){
String query = "MATCH (tom:Person {name: 'Tom Hanks'})-[:ACTED_IN]->(movie1:Movie)<-[:ACTED_IN]-(coActor:Person)-[:ACTED_IN]->(movie2:Movie)<-[:ACTED_IN]-(cruise:Person {name: 'Tom Cruise'})\n"
+ "WHERE NOT (tom)-[:ACTED_IN]->(:Movie)<-[:ACTED_IN]-(cruise)\n"
+ "RETURN tom.name AS actorName, movie1.title AS actedInMovie, coActor.name AS coActorName, movie2.title AS coActorActivedInMovie, cruise.name AS coCoActorName;";
List<String> expected = Arrays.asList(
);
return new QueryContext(query, expected);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,115 @@
package com.alibaba.graphscope.cypher.integration.movie;

import com.alibaba.graphscope.cypher.integration.suite.ldbc.MovieQueries;
import com.alibaba.graphscope.cypher.integration.suite.ldbc.QueryContext;
import org.junit.AfterClass;
import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.Test;
import org.neo4j.driver.GraphDatabase;
import org.neo4j.driver.Result;
import org.neo4j.driver.Session;

public class MovieTest {

private static Session session;

@BeforeClass
public static void beforeClass() {
String neo4jServerUrl =
System.getProperty("neo4j.bolt.server.url", "neo4j://localhost:7687");
session = GraphDatabase.driver(neo4jServerUrl).session();
}

@Test
public void run_movie_query1_test() {
QueryContext testQuery = MovieQueries.get_movie_query1_test();
Result result = session.run(testQuery.getQuery());
Assert.assertEquals(testQuery.getExpectedResult().toString(), result.list().toString());
}


@Test
public void run_movie_query2_test() {
QueryContext testQuery = MovieQueries.get_movie_query2_test();
Result result = session.run(testQuery.getQuery());
Assert.assertEquals(testQuery.getExpectedResult().toString(), result.list().toString());
}

@Test
public void run_movie_query3_test() {
QueryContext testQuery = MovieQueries.get_movie_query3_test();
Result result = session.run(testQuery.getQuery());
Assert.assertEquals(testQuery.getExpectedResult().toString(), result.list().toString());
}

@Test
public void run_movie_query4_test() {
QueryContext testQuery = MovieQueries.get_movie_query4_test();
Result result = session.run(testQuery.getQuery());
Assert.assertEquals(testQuery.getExpectedResult().toString(), result.list().toString());
}

@Test
public void run_movie_query5_test() {
QueryContext testQuery = MovieQueries.get_movie_query5_test();
Result result = session.run(testQuery.getQuery());
Assert.assertEquals(testQuery.getExpectedResult().toString(), result.list().toString());
}

@Test
public void run_movie_query6_test() {
QueryContext testQuery = MovieQueries.get_movie_query6_test();
Result result = session.run(testQuery.getQuery());
Assert.assertEquals(testQuery.getExpectedResult().toString(), result.list().toString());
}

@Test
public void run_movie_query7_test() {
QueryContext testQuery = MovieQueries.get_movie_query7_test();
Result result = session.run(testQuery.getQuery());
Assert.assertEquals(testQuery.getExpectedResult().toString(), result.list().toString());
}

@Test
public void run_movie_query11_test() {
QueryContext testQuery = MovieQueries.get_movie_query11_test();
Result result = session.run(testQuery.getQuery());
Assert.assertEquals(testQuery.getExpectedResult().toString(), result.list().toString());
}

@Test
public void run_movie_query12_test() {
QueryContext testQuery = MovieQueries.get_movie_query12_test();
Result result = session.run(testQuery.getQuery());
Assert.assertEquals(testQuery.getExpectedResult().toString(), result.list().toString());
}

@Test
public void run_movie_query13_test() {
QueryContext testQuery = MovieQueries.get_movie_query13_test();
Result result = session.run(testQuery.getQuery());
Assert.assertEquals(testQuery.getExpectedResult().toString(), result.list().toString());
}

@Test
public void run_movie_query14_test() {
QueryContext testQuery = MovieQueries.get_movie_query14_test();
Result result = session.run(testQuery.getQuery());
Assert.assertEquals(testQuery.getExpectedResult().toString(), result.list().toString());
}

@Test
public void run_movie_query15_test() {
QueryContext testQuery = MovieQueries.get_movie_query15_test();
Result result = session.run(testQuery.getQuery());
Assert.assertEquals(testQuery.getExpectedResult().toString(), result.list().toString());
}

@AfterClass
public static void afterClass() {
if (session != null) {
session.close();
}
}
}

0 comments on commit f972ed7

Please sign in to comment.