From 92368914f5e37d1b6062289cd6961cd2ab7437ad Mon Sep 17 00:00:00 2001 From: coderzc Date: Wed, 19 May 2021 11:25:05 +0800 Subject: [PATCH 01/10] add user test --- .../com/baidu/hugegraph/api/BaseApiTest.java | 5 + .../com/baidu/hugegraph/api/UserApiTest.java | 181 ++++++++++++++++++ 2 files changed, 186 insertions(+) create mode 100644 hugegraph-test/src/main/java/com/baidu/hugegraph/api/UserApiTest.java diff --git a/hugegraph-test/src/main/java/com/baidu/hugegraph/api/BaseApiTest.java b/hugegraph-test/src/main/java/com/baidu/hugegraph/api/BaseApiTest.java index 6cfb7d359e..d4ba48188f 100644 --- a/hugegraph-test/src/main/java/com/baidu/hugegraph/api/BaseApiTest.java +++ b/hugegraph-test/src/main/java/com/baidu/hugegraph/api/BaseApiTest.java @@ -34,6 +34,7 @@ import javax.ws.rs.client.WebTarget; import javax.ws.rs.core.Response; +import org.glassfish.jersey.client.authentication.HttpAuthenticationFeature; import org.glassfish.jersey.client.filter.EncodingFilter; import org.glassfish.jersey.message.GZipEncoder; import org.junit.After; @@ -52,6 +53,8 @@ public class BaseApiTest { private static String BASE_URL = "http://127.0.0.1:8080"; private static String GRAPH = "hugegraph"; + protected static final String USERNAME = "admin"; + protected static final String PASSWORD = "pa"; private static final String URL_PREFIX = "graphs/" + GRAPH; private static final String SCHEMA_PKS = "/schema/propertykeys"; @@ -98,6 +101,8 @@ public RestClient(String url) { this.client = ClientBuilder.newClient(); this.client.register(EncodingFilter.class); this.client.register(GZipEncoder.class); + this.client.register(HttpAuthenticationFeature.basic(USERNAME, + PASSWORD)); this.target = this.client.target(url); } diff --git a/hugegraph-test/src/main/java/com/baidu/hugegraph/api/UserApiTest.java b/hugegraph-test/src/main/java/com/baidu/hugegraph/api/UserApiTest.java new file mode 100644 index 0000000000..ef4b610db4 --- /dev/null +++ b/hugegraph-test/src/main/java/com/baidu/hugegraph/api/UserApiTest.java @@ -0,0 +1,181 @@ +/* + * Copyright 2017 HugeGraph Authors + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +package com.baidu.hugegraph.api; + +import java.util.List; +import java.util.Map; + +import javax.ws.rs.core.Response; + +import org.apache.tinkerpop.shaded.jackson.core.type.TypeReference; +import org.hamcrest.CoreMatchers; +import org.junit.After; +import org.junit.Assert; +import org.junit.Test; + +import com.baidu.hugegraph.util.JsonUtil; +import com.google.common.collect.ImmutableMap; + +public class UserApiTest extends BaseApiTest { + + private static final String path = "graphs/hugegraph/auth/users"; + + @After + public void clearUser() { + Response r = this.client().get(path, + ImmutableMap.of("limit", -1)); + String result = r.readEntity(String.class); + Map>> resultMap = + JsonUtil.fromJson(result, + new TypeReference>>>() {}); + List> users = resultMap.get("users"); + for (Map user : users) { + if (user.get("user_name").equals("admin")) { + continue; + } + this.client().delete(path, (String) user.get("id")); + } + } + + @Test + public void testCreate() { + String user1 = "{\"user_name\":\"user1\",\"user_password\":\"p1\"," + + "\"user_email\":\"user1@baidu.com\",\"user_phone\":" + + "\"123456789\",\"user_avatar\":\"image1.jpg\"}"; + + String user2 = "{\"user_name\":\"user2\",\"user_password\":\"p2\"," + + "\"user_email\":\"user2@baidu.com\"," + + "\"user_phone\":\"1357924680\"," + + "\"user_avatar\":\"image2.jpg\"}"; + + Response r = client().post(path, user1); + String result = assertResponseStatus(201, r); + Response r2 = client().post(path, user2); + String result2 = assertResponseStatus(201, r2); + + assertJsonContains(result, "user_name"); + assertJsonContains(result, "user_password"); + assertJsonContains(result, "user_email"); + assertJsonContains(result, "user_phone"); + assertJsonContains(result, "user_avatar"); + + assertJsonContains(result2, "user_name"); + assertJsonContains(result2, "user_password"); + assertJsonContains(result2, "user_email"); + assertJsonContains(result2, "user_phone"); + assertJsonContains(result2, "user_avatar"); + + Response r3 = client().post(path, "{}"); + assertResponseStatus(400, r3); + + + String user3 = "{\"user_name\":\"user1\",\"user_password\":\"p1\"," + + "\"user_email\":\"user1@baidu.com\"," + + "\"user_phone\":\"123456789\",\"user_avatar\":\"image1" + + ".jpg\"}"; + Response r4 = client().post(path, user3); + String result4 = assertResponseStatus(400, r4); + String message = assertJsonContains(result4, "message"); + Assert.assertThat(message, CoreMatchers.containsString( + "that already exists")); + } + + @Test + public void testList() { + createUser("test1"); + createUser("test2"); + createUser("test3"); + List> users = getList(); + Assert.assertEquals(4, users.size()); + } + + @Test + public void testGetUser() { + createUser("test1"); + createUser("test2"); + List> users = getList(); + for (Map user : users) { + Response r = client().get(path, (String) user.get("id")); + String result = assertResponseStatus(200, r); + assertJsonContains(result, "user_name"); + } + } + + @Test + public void testUpdate() { + createUser("test1"); + createUser("test2"); + List> users = getList(); + for (Map user : users) { + if (user.get("user_name").equals("admin")) { + continue; + } + String user1 = "{\"user_password\":\"p1\"," + + "\"user_email\":\"user1@baidu.com\"," + + "\"user_phone\":\"111111\"," + + "\"user_avatar\":\"image1" + + ".jpg\"}"; + Response r = client().put(path, (String) user.get("id"), user1, + ImmutableMap.of()); + assertResponseStatus(200, r); + } + + } + + @Test + public void testDelete() { + createUser("test1"); + createUser("test2"); + createUser("test3"); + + List> users = getList(); + for (Map user : users) { + if (user.get("user_name").equals("admin")) { + continue; + } + Response r = client().delete(path, (String) user.get("id")); + } + Response r = client().delete(path, "test1"); + String result = assertResponseStatus(400, r); + String message = assertJsonContains(result, "message"); + Assert.assertThat(message, CoreMatchers.containsString( + "Invalid user id:")); + } + + protected void createUser(String name) { + String user = "{\"user_name\":\"" + name + "\",\"user_password\":\"p1" + + "\", \"user_email\":\"user1@baidu.com\", " + + "\"user_phone\"123456789\", \"user_avatar\":\"image1" + + ".jpg\"}"; + this.client().post(path, user); + } + + protected List> getList() { + Response r = this.client().get(path, + ImmutableMap.of("limit", -1)); + String result = assertResponseStatus(200, r); + Map>> resultMap = JsonUtil.fromJson( + result, + new TypeReference>>>() { + }); + return resultMap.get("users"); + } +} From 00b22f64670614dba63a420c180685add132074c Mon Sep 17 00:00:00 2001 From: coderzc Date: Wed, 19 May 2021 13:19:26 +0800 Subject: [PATCH 02/10] open auth properties --- .../src/assembly/travis/run-api-test.sh | 21 +++++++++++ .../src/assembly/travis/start-server.sh | 2 +- .../com/baidu/hugegraph/api/ApiTestSuite.java | 3 +- .../com/baidu/hugegraph/api/UserApiTest.java | 35 +++++++++---------- 4 files changed, 41 insertions(+), 20 deletions(-) diff --git a/hugegraph-dist/src/assembly/travis/run-api-test.sh b/hugegraph-dist/src/assembly/travis/run-api-test.sh index 8f66abd13d..f4e1fc6eb7 100755 --- a/hugegraph-dist/src/assembly/travis/run-api-test.sh +++ b/hugegraph-dist/src/assembly/travis/run-api-test.sh @@ -5,9 +5,30 @@ set -ev TRAVIS_DIR=`dirname $0` VERSION=`mvn help:evaluate -Dexpression=project.version -q -DforceStdout` SERVER_DIR=hugegraph-$VERSION +CONF=$TRAVIS_DIR/conf/hugegraph.properties +REST_CONF=$TRAVIS_DIR/conf/rest-server.properties +GREMLIN_CONF=$TRAVIS_DIR/conf/gremlin-server.yaml mvn package -DskipTests + +cp $CONF "${CONF}_bak" +cp $REST_CONF "${REST_CONF}_bak" +cp $GREMLIN_CONF "${GREMLIN_CONF}_bak" + +sed -i '$/#auth.authenticator=/auth.authenticator=com.baidu.hugegraph.auth.StandardAuthenticator' $REST_CONF +sed -i '$/gremlin.graph=.*/gremlin.graph=com.baidu.hugegraph.auth.HugeFactoryAuthProxy/' $CONF +echo " +authentication: { + authenticator: com.baidu.hugegraph.auth.StandardAuthenticator, + authenticationHandler: com.baidu.hugegraph.auth.WsAndHttpBasicAuthHandler, + config: {tokens: conf/rest-server.properties} +}" >> $GREMLIN_CONF + $TRAVIS_DIR/start-server.sh $SERVER_DIR || (cat $SERVER_DIR/logs/hugegraph-server.log && exit 1) mvn test -P api-test,$BACKEND || (cat $SERVER_DIR/logs/hugegraph-server.log && exit 1) $TRAVIS_DIR/build-report.sh $TRAVIS_DIR/stop-server.sh + +mv "${CONF}_bak" $CONF +mv "${REST_CONF}_bak" $REST_CONF +mv "${GREMLIN_CONF}_bak" $GREMLIN_CONF \ No newline at end of file diff --git a/hugegraph-dist/src/assembly/travis/start-server.sh b/hugegraph-dist/src/assembly/travis/start-server.sh index 8716654824..9c9ea992f6 100755 --- a/hugegraph-dist/src/assembly/travis/start-server.sh +++ b/hugegraph-dist/src/assembly/travis/start-server.sh @@ -37,4 +37,4 @@ fi echo "schema.sync_deletion=true" >> $CONF AGENT_JAR=${HOME_DIR}/${TRAVIS_DIR}/jacocoagent.jar -$BIN/init-store.sh && $BIN/start-hugegraph.sh -j "-javaagent:${AGENT_JAR}=includes=*,port=36320,destfile=jacoco-it.exec,output=tcpserver" -v +echo -e "pa" | bin/init-store.sh && $BIN/start-hugegraph.sh -j "-javaagent:${AGENT_JAR}=includes=*,port=36320,destfile=jacoco-it.exec,output=tcpserver" -v diff --git a/hugegraph-test/src/main/java/com/baidu/hugegraph/api/ApiTestSuite.java b/hugegraph-test/src/main/java/com/baidu/hugegraph/api/ApiTestSuite.java index af8fadda93..05b69c865b 100644 --- a/hugegraph-test/src/main/java/com/baidu/hugegraph/api/ApiTestSuite.java +++ b/hugegraph-test/src/main/java/com/baidu/hugegraph/api/ApiTestSuite.java @@ -35,7 +35,8 @@ EdgeApiTest.class, TaskApiTest.class, GremlinApiTest.class, - MetricsApiTest.class + MetricsApiTest.class, + UserApiTest.class }) public class ApiTestSuite { diff --git a/hugegraph-test/src/main/java/com/baidu/hugegraph/api/UserApiTest.java b/hugegraph-test/src/main/java/com/baidu/hugegraph/api/UserApiTest.java index ef4b610db4..bfe1964239 100644 --- a/hugegraph-test/src/main/java/com/baidu/hugegraph/api/UserApiTest.java +++ b/hugegraph-test/src/main/java/com/baidu/hugegraph/api/UserApiTest.java @@ -36,9 +36,12 @@ public class UserApiTest extends BaseApiTest { private static final String path = "graphs/hugegraph/auth/users"; + private static final Map NO_LIMIT = ImmutableMap.of("limit", + -1); @After - public void clearUser() { + public void teardown() throws Exception { + super.teardown(); Response r = this.client().get(path, ImmutableMap.of("limit", -1)); String result = r.readEntity(String.class); @@ -86,7 +89,6 @@ public void testCreate() { Response r3 = client().post(path, "{}"); assertResponseStatus(400, r3); - String user3 = "{\"user_name\":\"user1\",\"user_password\":\"p1\"," + "\"user_email\":\"user1@baidu.com\"," + "\"user_phone\":\"123456789\",\"user_avatar\":\"image1" + @@ -94,8 +96,8 @@ public void testCreate() { Response r4 = client().post(path, user3); String result4 = assertResponseStatus(400, r4); String message = assertJsonContains(result4, "message"); - Assert.assertThat(message, CoreMatchers.containsString( - "that already exists")); + Assert.assertThat(message, + CoreMatchers.containsString("that already exists")); } @Test @@ -103,7 +105,7 @@ public void testList() { createUser("test1"); createUser("test2"); createUser("test3"); - List> users = getList(); + List> users = listUsers(); Assert.assertEquals(4, users.size()); } @@ -111,7 +113,7 @@ public void testList() { public void testGetUser() { createUser("test1"); createUser("test2"); - List> users = getList(); + List> users = listUsers(); for (Map user : users) { Response r = client().get(path, (String) user.get("id")); String result = assertResponseStatus(200, r); @@ -123,7 +125,7 @@ public void testGetUser() { public void testUpdate() { createUser("test1"); createUser("test2"); - List> users = getList(); + List> users = listUsers(); for (Map user : users) { if (user.get("user_name").equals("admin")) { continue; @@ -137,7 +139,6 @@ public void testUpdate() { ImmutableMap.of()); assertResponseStatus(200, r); } - } @Test @@ -146,7 +147,7 @@ public void testDelete() { createUser("test2"); createUser("test3"); - List> users = getList(); + List> users = listUsers(); for (Map user : users) { if (user.get("user_name").equals("admin")) { continue; @@ -156,8 +157,8 @@ public void testDelete() { Response r = client().delete(path, "test1"); String result = assertResponseStatus(400, r); String message = assertJsonContains(result, "message"); - Assert.assertThat(message, CoreMatchers.containsString( - "Invalid user id:")); + Assert.assertThat(message, + CoreMatchers.containsString("Invalid user id:")); } protected void createUser(String name) { @@ -168,14 +169,12 @@ protected void createUser(String name) { this.client().post(path, user); } - protected List> getList() { - Response r = this.client().get(path, - ImmutableMap.of("limit", -1)); + protected List> listUsers() { + Response r = this.client().get(path, NO_LIMIT); String result = assertResponseStatus(200, r); - Map>> resultMap = JsonUtil.fromJson( - result, - new TypeReference>>>() { - }); + Map>> resultMap = + JsonUtil.fromJson(result, new TypeReference>>>() {}); return resultMap.get("users"); } } From 454d51ac3e3007ee54b033b6fa795f24d73db16c Mon Sep 17 00:00:00 2001 From: coderzc Date: Wed, 19 May 2021 19:35:02 +0800 Subject: [PATCH 03/10] improve code style --- .../src/assembly/travis/run-api-test.sh | 19 ++++++------------- .../com/baidu/hugegraph/api/UserApiTest.java | 8 ++++---- 2 files changed, 10 insertions(+), 17 deletions(-) diff --git a/hugegraph-dist/src/assembly/travis/run-api-test.sh b/hugegraph-dist/src/assembly/travis/run-api-test.sh index f4e1fc6eb7..8b781648d6 100755 --- a/hugegraph-dist/src/assembly/travis/run-api-test.sh +++ b/hugegraph-dist/src/assembly/travis/run-api-test.sh @@ -5,30 +5,23 @@ set -ev TRAVIS_DIR=`dirname $0` VERSION=`mvn help:evaluate -Dexpression=project.version -q -DforceStdout` SERVER_DIR=hugegraph-$VERSION -CONF=$TRAVIS_DIR/conf/hugegraph.properties -REST_CONF=$TRAVIS_DIR/conf/rest-server.properties -GREMLIN_CONF=$TRAVIS_DIR/conf/gremlin-server.yaml +CONF=$SERVER_DIR/conf/hugegraph.properties +REST_SERVER_CONF=$SERVER_DIR/conf/rest-server.properties +GREMLIN_SERVER_CONF=$SERVER_DIR/conf/gremlin-server.yaml mvn package -DskipTests -cp $CONF "${CONF}_bak" -cp $REST_CONF "${REST_CONF}_bak" -cp $GREMLIN_CONF "${GREMLIN_CONF}_bak" - -sed -i '$/#auth.authenticator=/auth.authenticator=com.baidu.hugegraph.auth.StandardAuthenticator' $REST_CONF +sed -i '$/#auth.authenticator=/auth.authenticator=com.baidu.hugegraph.auth +.StandardAuthenticator/' $REST_SERVER_CONF sed -i '$/gremlin.graph=.*/gremlin.graph=com.baidu.hugegraph.auth.HugeFactoryAuthProxy/' $CONF echo " authentication: { authenticator: com.baidu.hugegraph.auth.StandardAuthenticator, authenticationHandler: com.baidu.hugegraph.auth.WsAndHttpBasicAuthHandler, config: {tokens: conf/rest-server.properties} -}" >> $GREMLIN_CONF +}" >> $GREMLIN_SERVER_CONF $TRAVIS_DIR/start-server.sh $SERVER_DIR || (cat $SERVER_DIR/logs/hugegraph-server.log && exit 1) mvn test -P api-test,$BACKEND || (cat $SERVER_DIR/logs/hugegraph-server.log && exit 1) $TRAVIS_DIR/build-report.sh $TRAVIS_DIR/stop-server.sh - -mv "${CONF}_bak" $CONF -mv "${REST_CONF}_bak" $REST_CONF -mv "${GREMLIN_CONF}_bak" $GREMLIN_CONF \ No newline at end of file diff --git a/hugegraph-test/src/main/java/com/baidu/hugegraph/api/UserApiTest.java b/hugegraph-test/src/main/java/com/baidu/hugegraph/api/UserApiTest.java index bfe1964239..a2b124ce70 100644 --- a/hugegraph-test/src/main/java/com/baidu/hugegraph/api/UserApiTest.java +++ b/hugegraph-test/src/main/java/com/baidu/hugegraph/api/UserApiTest.java @@ -36,14 +36,13 @@ public class UserApiTest extends BaseApiTest { private static final String path = "graphs/hugegraph/auth/users"; - private static final Map NO_LIMIT = ImmutableMap.of("limit", - -1); + private static final int NO_LIMIT = -1; @After public void teardown() throws Exception { super.teardown(); Response r = this.client().get(path, - ImmutableMap.of("limit", -1)); + ImmutableMap.of("limit", NO_LIMIT)); String result = r.readEntity(String.class); Map>> resultMap = JsonUtil.fromJson(result, @@ -170,7 +169,8 @@ protected void createUser(String name) { } protected List> listUsers() { - Response r = this.client().get(path, NO_LIMIT); + Response r = this.client().get(path, ImmutableMap.of("limit", + NO_LIMIT)); String result = assertResponseStatus(200, r); Map>> resultMap = JsonUtil.fromJson(result, new TypeReference Date: Wed, 19 May 2021 20:58:54 +0800 Subject: [PATCH 04/10] fix shell --- hugegraph-dist/src/assembly/travis/run-api-test.sh | 5 ++--- hugegraph-dist/src/assembly/travis/start-server.sh | 2 +- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/hugegraph-dist/src/assembly/travis/run-api-test.sh b/hugegraph-dist/src/assembly/travis/run-api-test.sh index 8b781648d6..3de7ba6a57 100755 --- a/hugegraph-dist/src/assembly/travis/run-api-test.sh +++ b/hugegraph-dist/src/assembly/travis/run-api-test.sh @@ -11,9 +11,8 @@ GREMLIN_SERVER_CONF=$SERVER_DIR/conf/gremlin-server.yaml mvn package -DskipTests -sed -i '$/#auth.authenticator=/auth.authenticator=com.baidu.hugegraph.auth -.StandardAuthenticator/' $REST_SERVER_CONF -sed -i '$/gremlin.graph=.*/gremlin.graph=com.baidu.hugegraph.auth.HugeFactoryAuthProxy/' $CONF +sed -i 's/#auth.authenticator=/auth.authenticator=com.baidu.hugegraph.auth.StandardAuthenticator/' $REST_SERVER_CONF +sed -i 's/gremlin.graph=.*/gremlin.graph=com.baidu.hugegraph.auth.HugeFactoryAuthProxy/' $CONF echo " authentication: { authenticator: com.baidu.hugegraph.auth.StandardAuthenticator, diff --git a/hugegraph-dist/src/assembly/travis/start-server.sh b/hugegraph-dist/src/assembly/travis/start-server.sh index 9c9ea992f6..ccda32728b 100755 --- a/hugegraph-dist/src/assembly/travis/start-server.sh +++ b/hugegraph-dist/src/assembly/travis/start-server.sh @@ -37,4 +37,4 @@ fi echo "schema.sync_deletion=true" >> $CONF AGENT_JAR=${HOME_DIR}/${TRAVIS_DIR}/jacocoagent.jar -echo -e "pa" | bin/init-store.sh && $BIN/start-hugegraph.sh -j "-javaagent:${AGENT_JAR}=includes=*,port=36320,destfile=jacoco-it.exec,output=tcpserver" -v +echo -e "pa" | $BIN/init-store.sh && $BIN/start-hugegraph.sh -j "-javaagent:${AGENT_JAR}=includes=*,port=36320,destfile=jacoco-it.exec,output=tcpserver" -v From d47d8cc6284f92f753b6facbf1e33f8a747dd448 Mon Sep 17 00:00:00 2001 From: coderzc Date: Fri, 21 May 2021 17:15:34 +0800 Subject: [PATCH 05/10] fix test --- .../java/com/baidu/hugegraph/api/UserApiTest.java | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/hugegraph-test/src/main/java/com/baidu/hugegraph/api/UserApiTest.java b/hugegraph-test/src/main/java/com/baidu/hugegraph/api/UserApiTest.java index a2b124ce70..a48ba1be41 100644 --- a/hugegraph-test/src/main/java/com/baidu/hugegraph/api/UserApiTest.java +++ b/hugegraph-test/src/main/java/com/baidu/hugegraph/api/UserApiTest.java @@ -162,10 +162,11 @@ public void testDelete() { protected void createUser(String name) { String user = "{\"user_name\":\"" + name + "\",\"user_password\":\"p1" + - "\", \"user_email\":\"user1@baidu.com\", " + - "\"user_phone\"123456789\", \"user_avatar\":\"image1" + + "\", \"user_email\":\"user1@baidu.com\"," + + "\"user_phone\":123456789,\"user_avatar\":\"image1" + ".jpg\"}"; - this.client().post(path, user); + Response r = this.client().post(path, user); + assertResponseStatus(201, r); } protected List> listUsers() { @@ -173,8 +174,8 @@ protected List> listUsers() { NO_LIMIT)); String result = assertResponseStatus(200, r); Map>> resultMap = - JsonUtil.fromJson(result, new TypeReference>>>() {}); + JsonUtil.fromJson(result, new TypeReference>>>() {}); return resultMap.get("users"); } } From 89a69f209f42ec8591b2f270fb4301cc45e4930f Mon Sep 17 00:00:00 2001 From: coderzc Date: Mon, 24 May 2021 19:34:41 +0800 Subject: [PATCH 06/10] fix json --- .../src/main/java/com/baidu/hugegraph/api/UserApiTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hugegraph-test/src/main/java/com/baidu/hugegraph/api/UserApiTest.java b/hugegraph-test/src/main/java/com/baidu/hugegraph/api/UserApiTest.java index a48ba1be41..7719f75ca8 100644 --- a/hugegraph-test/src/main/java/com/baidu/hugegraph/api/UserApiTest.java +++ b/hugegraph-test/src/main/java/com/baidu/hugegraph/api/UserApiTest.java @@ -163,7 +163,7 @@ public void testDelete() { protected void createUser(String name) { String user = "{\"user_name\":\"" + name + "\",\"user_password\":\"p1" + "\", \"user_email\":\"user1@baidu.com\"," + - "\"user_phone\":123456789,\"user_avatar\":\"image1" + + "\"user_phone\":\"123456789\",\"user_avatar\":\"image1" + ".jpg\"}"; Response r = this.client().post(path, user); assertResponseStatus(201, r); From 839b30f81cb314f5357e5dab56021bb2ea28da7e Mon Sep 17 00:00:00 2001 From: coderzc Date: Tue, 25 May 2021 11:50:20 +0800 Subject: [PATCH 07/10] fix test --- .../main/java/com/baidu/hugegraph/api/GremlinApiTest.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/hugegraph-test/src/main/java/com/baidu/hugegraph/api/GremlinApiTest.java b/hugegraph-test/src/main/java/com/baidu/hugegraph/api/GremlinApiTest.java index 19ad475add..05dd504279 100644 --- a/hugegraph-test/src/main/java/com/baidu/hugegraph/api/GremlinApiTest.java +++ b/hugegraph-test/src/main/java/com/baidu/hugegraph/api/GremlinApiTest.java @@ -93,7 +93,13 @@ public void testClearAndInit() { assertResponseStatus(200, client().post(path, body)); body = "{" - + "\"gremlin\":\"hugegraph.initBackend()\"," + + "\"gremlin\":\"import com.baidu.hugegraph.auth.HugeUser;" + + "import com.baidu.hugegraph.util.StringEncoding;" + + "hugegraph.initBackend();" + + "HugeUser admin = new HugeUser('admin');" + + "admin.password(StringEncoding.hashPassword('pa'));" + + "admin.creator('system');" + + "hugegraph.hugegraph().authManager().createUser(admin);\"," + "\"bindings\":{}," + "\"language\":\"gremlin-groovy\"," + "\"aliases\":{\"g\":\"__g_hugegraph\"}}"; From 50e926bd9f60e8e2b7151c1764d32fa129537035 Mon Sep 17 00:00:00 2001 From: coderzc Date: Thu, 27 May 2021 18:22:03 +0800 Subject: [PATCH 08/10] fix auth startup of memory backend bug --- .../hugegraph/auth/ConfigAuthenticator.java | 15 +++++++++++++-- .../hugegraph/auth/HugeAuthenticator.java | 2 ++ .../hugegraph/auth/StandardAuthenticator.java | 18 ++++++++++++------ .../com/baidu/hugegraph/core/GraphManager.java | 14 ++++++++++++-- .../com/baidu/hugegraph/cmd/InitStore.java | 2 +- .../baidu/hugegraph/api/GremlinApiTest.java | 8 +------- 6 files changed, 41 insertions(+), 18 deletions(-) diff --git a/hugegraph-api/src/main/java/com/baidu/hugegraph/auth/ConfigAuthenticator.java b/hugegraph-api/src/main/java/com/baidu/hugegraph/auth/ConfigAuthenticator.java index 18529fa244..ede416871e 100644 --- a/hugegraph-api/src/main/java/com/baidu/hugegraph/auth/ConfigAuthenticator.java +++ b/hugegraph-api/src/main/java/com/baidu/hugegraph/auth/ConfigAuthenticator.java @@ -22,6 +22,7 @@ import java.net.InetAddress; import java.util.HashMap; import java.util.Map; +import java.util.Objects; import org.apache.commons.lang.NotImplementedException; import org.apache.tinkerpop.gremlin.groovy.jsr223.dsl.credential.CredentialGraphTokens; @@ -81,11 +82,21 @@ public RolePermission authenticate(final String username, @Override public AuthManager authManager() { - throw new NotImplementedException("AuthManager is unsupported"); + throw new NotImplementedException( + "AuthManager is unsupported by ConfigAuthenticator"); + } + + @Override + public void initAdminUser(String password) throws Exception { + String adminToken = this.tokens.get(USER_ADMIN); + E.checkArgument(Objects.equals(adminToken, password), + "The password can't be changed for " + + "ConfigAuthenticator"); } @Override public SaslNegotiator newSaslNegotiator(InetAddress remoteAddress) { - throw new NotImplementedException("SaslNegotiator is unsupported"); + throw new NotImplementedException( + "SaslNegotiator is unsupported by ConfigAuthenticator"); } } diff --git a/hugegraph-api/src/main/java/com/baidu/hugegraph/auth/HugeAuthenticator.java b/hugegraph-api/src/main/java/com/baidu/hugegraph/auth/HugeAuthenticator.java index c8b39d3191..f0c07b17d8 100644 --- a/hugegraph-api/src/main/java/com/baidu/hugegraph/auth/HugeAuthenticator.java +++ b/hugegraph-api/src/main/java/com/baidu/hugegraph/auth/HugeAuthenticator.java @@ -121,6 +121,8 @@ public default boolean verifyRole(RolePermission role) { } } + public void initAdminUser(String password) throws Exception; + public static HugeAuthenticator loadAuthenticator(HugeConfig conf) { String authClass = conf.get(ServerOptions.AUTHENTICATOR); if (authClass.isEmpty()) { diff --git a/hugegraph-api/src/main/java/com/baidu/hugegraph/auth/StandardAuthenticator.java b/hugegraph-api/src/main/java/com/baidu/hugegraph/auth/StandardAuthenticator.java index 8f11f4b4d7..708a5094e0 100644 --- a/hugegraph-api/src/main/java/com/baidu/hugegraph/auth/StandardAuthenticator.java +++ b/hugegraph-api/src/main/java/com/baidu/hugegraph/auth/StandardAuthenticator.java @@ -47,6 +47,12 @@ private HugeGraph graph() { } private void initAdminUser() throws Exception { + this.initAdminUser(this.inputPassword()); + + this.graph.close(); + } + + public void initAdminUser(String password) throws Exception { // Not allowed to call by non main thread String caller = Thread.currentThread().getName(); E.checkState(caller.equals("main"), "Invalid caller '%s'", caller); @@ -56,12 +62,10 @@ private void initAdminUser() throws Exception { if (StandardAuthManager.isLocal(authManager) && authManager.findUser(HugeAuthenticator.USER_ADMIN) == null) { HugeUser admin = new HugeUser(HugeAuthenticator.USER_ADMIN); - admin.password(StringEncoding.hashPassword(this.inputPassword())); + admin.password(StringEncoding.hashPassword(password)); admin.creator(HugeAuthenticator.USER_SYSTEM); authManager.createUser(admin); } - - this.graph.close(); } private String inputPassword() { @@ -141,15 +145,17 @@ public SaslNegotiator newSaslNegotiator(InetAddress remoteAddress) { throw new NotImplementedException("SaslNegotiator is unsupported"); } - public static void initAdminUser(String restConfFile) throws Exception { + public static void initAdminUserIfNeeded(String confFile) throws Exception { StandardAuthenticator auth = new StandardAuthenticator(); - HugeConfig config = new HugeConfig(restConfFile); + HugeConfig config = new HugeConfig(confFile); String authClass = config.get(ServerOptions.AUTHENTICATOR); if (authClass.isEmpty()) { return; } config.addProperty(INITING_STORE, true); auth.setup(config); - auth.initAdminUser(); + if (auth.graph().backendStoreFeatures().supportsPersistence()) { + auth.initAdminUser(); + } } } diff --git a/hugegraph-api/src/main/java/com/baidu/hugegraph/core/GraphManager.java b/hugegraph-api/src/main/java/com/baidu/hugegraph/core/GraphManager.java index a30f05a2e3..1a9f778ab9 100644 --- a/hugegraph-api/src/main/java/com/baidu/hugegraph/core/GraphManager.java +++ b/hugegraph-api/src/main/java/com/baidu/hugegraph/core/GraphManager.java @@ -82,7 +82,7 @@ public GraphManager(HugeConfig conf) { // this.installLicense(conf, ""); // Raft will load snapshot firstly then launch election and replay log this.waitGraphsStarted(); - this.checkBackendVersionOrExit(); + this.checkBackendVersionOrExit(conf); this.startRpcServer(); this.serverStarted(conf); this.addMetrics(conf); @@ -256,12 +256,22 @@ private void loadGraph(String name, String path) { } } - private void checkBackendVersionOrExit() { + private void checkBackendVersionOrExit(HugeConfig config) { for (String graph : this.graphs()) { // TODO: close tx from main thread HugeGraph hugegraph = this.graph(graph); if (!hugegraph.backendStoreFeatures().supportsPersistence()) { hugegraph.initBackend(); + if (this.requireAuthentication()) { + String token = config.get(ServerOptions.AUTH_ADMIN_TOKEN); + try { + this.authenticator.initAdminUser(token); + } catch (Exception e) { + throw new BackendException( + "The backend store of '%s' can't " + + "initialize admin user", hugegraph.name()); + } + } } BackendStoreSystemInfo info = hugegraph.backendStoreSystemInfo(); if (!info.exists()) { diff --git a/hugegraph-dist/src/main/java/com/baidu/hugegraph/cmd/InitStore.java b/hugegraph-dist/src/main/java/com/baidu/hugegraph/cmd/InitStore.java index f8ad7acb6d..a51e66ad26 100644 --- a/hugegraph-dist/src/main/java/com/baidu/hugegraph/cmd/InitStore.java +++ b/hugegraph-dist/src/main/java/com/baidu/hugegraph/cmd/InitStore.java @@ -99,7 +99,7 @@ public static void main(String[] args) throws Exception { initGraph(configPath); } - StandardAuthenticator.initAdminUser(restConfFile); + StandardAuthenticator.initAdminUserIfNeeded(restConfFile); HugeFactory.shutdown(30L); } diff --git a/hugegraph-test/src/main/java/com/baidu/hugegraph/api/GremlinApiTest.java b/hugegraph-test/src/main/java/com/baidu/hugegraph/api/GremlinApiTest.java index 05dd504279..2cc6d1b979 100644 --- a/hugegraph-test/src/main/java/com/baidu/hugegraph/api/GremlinApiTest.java +++ b/hugegraph-test/src/main/java/com/baidu/hugegraph/api/GremlinApiTest.java @@ -86,15 +86,9 @@ public void testScript() { @Test public void testClearAndInit() { String body = "{" - + "\"gremlin\":\"hugegraph.clearBackend()\"," - + "\"bindings\":{}," - + "\"language\":\"gremlin-groovy\"," - + "\"aliases\":{\"g\":\"__g_hugegraph\"}}"; - assertResponseStatus(200, client().post(path, body)); - - body = "{" + "\"gremlin\":\"import com.baidu.hugegraph.auth.HugeUser;" + "import com.baidu.hugegraph.util.StringEncoding;" + + "hugegraph.clearBackend();" + "hugegraph.initBackend();" + "HugeUser admin = new HugeUser('admin');" + "admin.password(StringEncoding.hashPassword('pa'));" From c250713f55ba048df3c416dbb809ff783581cbb4 Mon Sep 17 00:00:00 2001 From: coderzc Date: Thu, 27 May 2021 21:08:15 +0800 Subject: [PATCH 09/10] improve some comment --- hugegraph-dist/src/assembly/travis/run-api-test.sh | 1 + .../src/main/java/com/baidu/hugegraph/api/BaseApiTest.java | 4 ++-- .../main/java/com/baidu/hugegraph/api/GremlinApiTest.java | 5 ++--- .../src/main/java/com/baidu/hugegraph/api/UserApiTest.java | 5 +++-- 4 files changed, 8 insertions(+), 7 deletions(-) diff --git a/hugegraph-dist/src/assembly/travis/run-api-test.sh b/hugegraph-dist/src/assembly/travis/run-api-test.sh index 3de7ba6a57..c550fc7fbe 100755 --- a/hugegraph-dist/src/assembly/travis/run-api-test.sh +++ b/hugegraph-dist/src/assembly/travis/run-api-test.sh @@ -12,6 +12,7 @@ GREMLIN_SERVER_CONF=$SERVER_DIR/conf/gremlin-server.yaml mvn package -DskipTests sed -i 's/#auth.authenticator=/auth.authenticator=com.baidu.hugegraph.auth.StandardAuthenticator/' $REST_SERVER_CONF +sed -i 's/#auth.admin_token=/auth.admin_token=pa/' $REST_SERVER_CONF sed -i 's/gremlin.graph=.*/gremlin.graph=com.baidu.hugegraph.auth.HugeFactoryAuthProxy/' $CONF echo " authentication: { diff --git a/hugegraph-test/src/main/java/com/baidu/hugegraph/api/BaseApiTest.java b/hugegraph-test/src/main/java/com/baidu/hugegraph/api/BaseApiTest.java index d4ba48188f..8637fffbfd 100644 --- a/hugegraph-test/src/main/java/com/baidu/hugegraph/api/BaseApiTest.java +++ b/hugegraph-test/src/main/java/com/baidu/hugegraph/api/BaseApiTest.java @@ -53,8 +53,8 @@ public class BaseApiTest { private static String BASE_URL = "http://127.0.0.1:8080"; private static String GRAPH = "hugegraph"; - protected static final String USERNAME = "admin"; - protected static final String PASSWORD = "pa"; + private static final String USERNAME = "admin"; + private static final String PASSWORD = "pa"; private static final String URL_PREFIX = "graphs/" + GRAPH; private static final String SCHEMA_PKS = "/schema/propertykeys"; diff --git a/hugegraph-test/src/main/java/com/baidu/hugegraph/api/GremlinApiTest.java b/hugegraph-test/src/main/java/com/baidu/hugegraph/api/GremlinApiTest.java index 2cc6d1b979..8445a90eec 100644 --- a/hugegraph-test/src/main/java/com/baidu/hugegraph/api/GremlinApiTest.java +++ b/hugegraph-test/src/main/java/com/baidu/hugegraph/api/GremlinApiTest.java @@ -88,11 +88,10 @@ public void testClearAndInit() { String body = "{" + "\"gremlin\":\"import com.baidu.hugegraph.auth.HugeUser;" + "import com.baidu.hugegraph.util.StringEncoding;" + + "def auth = hugegraph.authManager();" + + "def admin = auth.findUser('admin');" + "hugegraph.clearBackend();" + "hugegraph.initBackend();" - + "HugeUser admin = new HugeUser('admin');" - + "admin.password(StringEncoding.hashPassword('pa'));" - + "admin.creator('system');" + "hugegraph.hugegraph().authManager().createUser(admin);\"," + "\"bindings\":{}," + "\"language\":\"gremlin-groovy\"," diff --git a/hugegraph-test/src/main/java/com/baidu/hugegraph/api/UserApiTest.java b/hugegraph-test/src/main/java/com/baidu/hugegraph/api/UserApiTest.java index 7719f75ca8..c42276ed7a 100644 --- a/hugegraph-test/src/main/java/com/baidu/hugegraph/api/UserApiTest.java +++ b/hugegraph-test/src/main/java/com/baidu/hugegraph/api/UserApiTest.java @@ -173,9 +173,10 @@ protected List> listUsers() { Response r = this.client().get(path, ImmutableMap.of("limit", NO_LIMIT)); String result = assertResponseStatus(200, r); + Map>> resultMap = - JsonUtil.fromJson(result, new TypeReference>>>() {}); + JsonUtil.fromJson(result, new TypeReference>>>() {}); return resultMap.get("users"); } } From 4f696635411c55446d57c6395f645730bba6a94e Mon Sep 17 00:00:00 2001 From: coderzc Date: Mon, 31 May 2021 16:38:07 +0800 Subject: [PATCH 10/10] improve some comment --- hugegraph-dist/src/assembly/travis/run-api-test.sh | 7 +++++++ .../main/java/com/baidu/hugegraph/api/GremlinApiTest.java | 7 +++---- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/hugegraph-dist/src/assembly/travis/run-api-test.sh b/hugegraph-dist/src/assembly/travis/run-api-test.sh index c550fc7fbe..87db73782e 100755 --- a/hugegraph-dist/src/assembly/travis/run-api-test.sh +++ b/hugegraph-dist/src/assembly/travis/run-api-test.sh @@ -11,9 +11,14 @@ GREMLIN_SERVER_CONF=$SERVER_DIR/conf/gremlin-server.yaml mvn package -DskipTests +# config rest-server sed -i 's/#auth.authenticator=/auth.authenticator=com.baidu.hugegraph.auth.StandardAuthenticator/' $REST_SERVER_CONF sed -i 's/#auth.admin_token=/auth.admin_token=pa/' $REST_SERVER_CONF + +# config hugegraph.properties sed -i 's/gremlin.graph=.*/gremlin.graph=com.baidu.hugegraph.auth.HugeFactoryAuthProxy/' $CONF + +# config gremlin-server echo " authentication: { authenticator: com.baidu.hugegraph.auth.StandardAuthenticator, @@ -22,6 +27,8 @@ authentication: { }" >> $GREMLIN_SERVER_CONF $TRAVIS_DIR/start-server.sh $SERVER_DIR || (cat $SERVER_DIR/logs/hugegraph-server.log && exit 1) + +# run api-test mvn test -P api-test,$BACKEND || (cat $SERVER_DIR/logs/hugegraph-server.log && exit 1) $TRAVIS_DIR/build-report.sh $TRAVIS_DIR/stop-server.sh diff --git a/hugegraph-test/src/main/java/com/baidu/hugegraph/api/GremlinApiTest.java b/hugegraph-test/src/main/java/com/baidu/hugegraph/api/GremlinApiTest.java index 8445a90eec..ee18ddb2b9 100644 --- a/hugegraph-test/src/main/java/com/baidu/hugegraph/api/GremlinApiTest.java +++ b/hugegraph-test/src/main/java/com/baidu/hugegraph/api/GremlinApiTest.java @@ -86,13 +86,12 @@ public void testScript() { @Test public void testClearAndInit() { String body = "{" - + "\"gremlin\":\"import com.baidu.hugegraph.auth.HugeUser;" - + "import com.baidu.hugegraph.util.StringEncoding;" - + "def auth = hugegraph.authManager();" + + "\"gremlin\":\"" + + "def auth = hugegraph.hugegraph().authManager();" + "def admin = auth.findUser('admin');" + "hugegraph.clearBackend();" + "hugegraph.initBackend();" - + "hugegraph.hugegraph().authManager().createUser(admin);\"," + + "auth.createUser(admin);\"," + "\"bindings\":{}," + "\"language\":\"gremlin-groovy\"," + "\"aliases\":{\"g\":\"__g_hugegraph\"}}";