mirror of
https://github.com/apache/sqoop.git
synced 2025-05-11 14:30:59 +08:00
SQOOP-2698: Sqoop2: RESTiliency: Split the InvalidRESTCallsTest into independent test cases
(Jarek Jarcec Cecho via Kate Ting)
This commit is contained in:
parent
30fe4da2cd
commit
cde1c3ac9e
@ -0,0 +1,73 @@
|
|||||||
|
/**
|
||||||
|
* 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 org.apache.sqoop.integration.server.rest;
|
||||||
|
|
||||||
|
import org.apache.sqoop.test.utils.ParametrizedUtils;
|
||||||
|
import org.testng.annotations.DataProvider;
|
||||||
|
import org.testng.annotations.Factory;
|
||||||
|
|
||||||
|
import java.util.Iterator;
|
||||||
|
|
||||||
|
public class ConnectorRestTest extends RestTest {
|
||||||
|
|
||||||
|
public static TestDescription[] PROVIDER_DATA = new TestDescription[]{
|
||||||
|
new TestDescription("Get all connectors", "v1/connector/all", "GET", null, new Validator() {
|
||||||
|
@Override
|
||||||
|
void validate() throws Exception {
|
||||||
|
assertResponseCode(200);
|
||||||
|
}}),
|
||||||
|
new TestDescription("Get connector by ID", "v1/connector/1", "GET", null, new Validator() {
|
||||||
|
@Override
|
||||||
|
void validate() throws Exception {
|
||||||
|
assertResponseCode(200);
|
||||||
|
}}),
|
||||||
|
new TestDescription("Get connector by name", "v1/connector/generic-jdbc-connector", "GET", null, new Validator() {
|
||||||
|
@Override
|
||||||
|
void validate() throws Exception {
|
||||||
|
assertResponseCode(200);
|
||||||
|
}}),
|
||||||
|
new TestDescription("Get connector by non-existing ID", "v1/connector/666", "GET", null, new Validator() {
|
||||||
|
@Override
|
||||||
|
void validate() throws Exception {
|
||||||
|
assertResponseCode(500);
|
||||||
|
assertServerException("org.apache.sqoop.server.common.ServerError", "SERVER_0006");
|
||||||
|
}}),
|
||||||
|
new TestDescription("Get connector by non-existing name", "v1/connector/jarcecs-cool-connector", "GET", null, new Validator() {
|
||||||
|
@Override
|
||||||
|
void validate() throws Exception {
|
||||||
|
assertResponseCode(500);
|
||||||
|
assertServerException("org.apache.sqoop.server.common.ServerError", "SERVER_0005");
|
||||||
|
}}),
|
||||||
|
new TestDescription("Invalid post request", "v1/connector", "POST", "Random data", new Validator() {
|
||||||
|
@Override
|
||||||
|
void validate() throws Exception {
|
||||||
|
assertResponseCode(500);
|
||||||
|
assertServerException("org.apache.sqoop.server.common.ServerError", "SERVER_0002");
|
||||||
|
}}),
|
||||||
|
};
|
||||||
|
|
||||||
|
@DataProvider(name="connector-rest-test", parallel=false)
|
||||||
|
public static Iterator<Object[]> data() {
|
||||||
|
return ParametrizedUtils.toArrayOfArrays(PROVIDER_DATA).iterator();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Factory(dataProvider = "connector-rest-test")
|
||||||
|
public ConnectorRestTest(TestDescription desc) {
|
||||||
|
super(desc);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,79 @@
|
|||||||
|
/**
|
||||||
|
* 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 org.apache.sqoop.integration.server.rest;
|
||||||
|
|
||||||
|
import org.apache.sqoop.test.utils.ParametrizedUtils;
|
||||||
|
import org.testng.annotations.BeforeMethod;
|
||||||
|
import org.testng.annotations.DataProvider;
|
||||||
|
import org.testng.annotations.Factory;
|
||||||
|
|
||||||
|
import java.util.Iterator;
|
||||||
|
|
||||||
|
public class LinkRestTest extends RestTest {
|
||||||
|
|
||||||
|
@BeforeMethod
|
||||||
|
public void setUp() {
|
||||||
|
createFirstLink();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static TestDescription[] PROVIDER_DATA = new TestDescription[]{
|
||||||
|
// Get
|
||||||
|
new TestDescription("Get all links", "v1/link/all", "GET", null, new Validator() {
|
||||||
|
@Override
|
||||||
|
void validate() throws Exception {
|
||||||
|
assertResponseCode(200);
|
||||||
|
assertContains("first-link");
|
||||||
|
}}),
|
||||||
|
new TestDescription("Get link by name", "v1/link/first-link", "GET", null, new Validator() {
|
||||||
|
@Override
|
||||||
|
void validate() throws Exception {
|
||||||
|
assertResponseCode(200);
|
||||||
|
assertContains("first-link");
|
||||||
|
}}),
|
||||||
|
new TestDescription("Get all links for connector", "v1/link/all?cname=generic-jdbc-connector", "GET", null, new Validator() {
|
||||||
|
@Override
|
||||||
|
void validate() throws Exception {
|
||||||
|
assertResponseCode(200);
|
||||||
|
assertContains("first-link");
|
||||||
|
}}),
|
||||||
|
new TestDescription("Get non existing link", "v1/link/i-dont-exists", "GET", null, new Validator() {
|
||||||
|
@Override
|
||||||
|
void validate() throws Exception {
|
||||||
|
assertResponseCode(500);
|
||||||
|
assertServerException("org.apache.sqoop.server.common.ServerError", "SERVER_0006");
|
||||||
|
assertContains("Invalid link name: i-dont-exists");
|
||||||
|
}}),
|
||||||
|
new TestDescription("Get links for non existing connector", "v1/link/all?cname=i-dont-exists", "GET", null, new Validator() {
|
||||||
|
@Override
|
||||||
|
void validate() throws Exception {
|
||||||
|
assertResponseCode(500);
|
||||||
|
assertServerException("org.apache.sqoop.server.common.ServerError", "SERVER_0005");
|
||||||
|
assertContains("Invalid connector: i-dont-exists");
|
||||||
|
}}),
|
||||||
|
};
|
||||||
|
|
||||||
|
@DataProvider(name="link-rest-test", parallel=false)
|
||||||
|
public static Iterator<Object[]> data() {
|
||||||
|
return ParametrizedUtils.toArrayOfArrays(PROVIDER_DATA).iterator();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Factory(dataProvider = "link-rest-test")
|
||||||
|
public LinkRestTest(TestDescription desc) {
|
||||||
|
super(desc);
|
||||||
|
}
|
||||||
|
}
|
@ -15,23 +15,21 @@
|
|||||||
* See the License for the specific language governing permissions and
|
* See the License for the specific language governing permissions and
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
package org.apache.sqoop.integration.server;
|
package org.apache.sqoop.integration.server.rest;
|
||||||
|
|
||||||
import org.apache.log4j.Logger;
|
import org.apache.log4j.Logger;
|
||||||
import com.google.common.collect.Iterables;
|
|
||||||
import org.apache.commons.io.IOUtils;
|
import org.apache.commons.io.IOUtils;
|
||||||
import org.apache.hadoop.security.token.delegation.web.DelegationTokenAuthenticatedURL;
|
import org.apache.hadoop.security.token.delegation.web.DelegationTokenAuthenticatedURL;
|
||||||
|
import org.apache.sqoop.common.SqoopException;
|
||||||
import org.apache.sqoop.model.MConfigList;
|
import org.apache.sqoop.model.MConfigList;
|
||||||
|
import org.apache.sqoop.model.MJob;
|
||||||
import org.apache.sqoop.model.MLink;
|
import org.apache.sqoop.model.MLink;
|
||||||
import org.apache.sqoop.test.infrastructure.Infrastructure;
|
import org.apache.sqoop.test.infrastructure.Infrastructure;
|
||||||
import org.apache.sqoop.test.infrastructure.SqoopTestCase;
|
import org.apache.sqoop.test.infrastructure.SqoopTestCase;
|
||||||
import org.apache.sqoop.test.infrastructure.providers.HadoopInfrastructureProvider;
|
import org.apache.sqoop.test.infrastructure.providers.HadoopInfrastructureProvider;
|
||||||
import org.apache.sqoop.test.infrastructure.providers.SqoopInfrastructureProvider;
|
import org.apache.sqoop.test.infrastructure.providers.SqoopInfrastructureProvider;
|
||||||
import org.apache.sqoop.test.utils.ParametrizedUtils;
|
|
||||||
import org.testng.annotations.AfterMethod;
|
import org.testng.annotations.AfterMethod;
|
||||||
import org.testng.annotations.BeforeMethod;
|
import org.testng.annotations.BeforeMethod;
|
||||||
import org.testng.annotations.DataProvider;
|
|
||||||
import org.testng.annotations.Factory;
|
|
||||||
import org.testng.annotations.Test;
|
import org.testng.annotations.Test;
|
||||||
|
|
||||||
import java.io.DataOutputStream;
|
import java.io.DataOutputStream;
|
||||||
@ -44,9 +42,9 @@
|
|||||||
import static org.testng.Assert.assertTrue;
|
import static org.testng.Assert.assertTrue;
|
||||||
|
|
||||||
@Infrastructure(dependencies = {HadoopInfrastructureProvider.class, SqoopInfrastructureProvider.class})
|
@Infrastructure(dependencies = {HadoopInfrastructureProvider.class, SqoopInfrastructureProvider.class})
|
||||||
public class InvalidRESTCallsTest extends SqoopTestCase {
|
public abstract class RestTest extends SqoopTestCase {
|
||||||
|
|
||||||
private static final Logger LOG = Logger.getLogger(InvalidRESTCallsTest.class);
|
private static final Logger LOG = Logger.getLogger(RestTest.class);
|
||||||
|
|
||||||
// Validate returned response from server
|
// Validate returned response from server
|
||||||
public static abstract class Validator {
|
public static abstract class Validator {
|
||||||
@ -65,7 +63,7 @@ public void setConnection(HttpURLConnection connection) throws Exception {
|
|||||||
try {
|
try {
|
||||||
this.input = (connection.getInputStream() != null) ? IOUtils.toString(connection.getInputStream()) : "";
|
this.input = (connection.getInputStream() != null) ? IOUtils.toString(connection.getInputStream()) : "";
|
||||||
} catch(Exception e) {
|
} catch(Exception e) {
|
||||||
// We're ignoring exception here because that means that request wasn't successful and data are in "error" stream
|
// We're ignoring exception here because that means that request wasn't successful and response is in "error" stream instead
|
||||||
}
|
}
|
||||||
this.error = connection.getErrorStream() != null ? IOUtils.toString(connection.getErrorStream()) : "";
|
this.error = connection.getErrorStream() != null ? IOUtils.toString(connection.getErrorStream()) : "";
|
||||||
}
|
}
|
||||||
@ -119,10 +117,9 @@ public TestDescription(String name, String rest, String method, String data, Val
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Data preparation for links, jobs and other objects that we might need.
|
* Various objects that can be pre-created by child test cases
|
||||||
*/
|
*/
|
||||||
@BeforeMethod
|
public void createFirstLink() {
|
||||||
public void loadTestData() {
|
|
||||||
// Link: first-link
|
// Link: first-link
|
||||||
MLink genericJDBCLink = getClient().createLink("generic-jdbc-connector");
|
MLink genericJDBCLink = getClient().createLink("generic-jdbc-connector");
|
||||||
genericJDBCLink.setName("first-link");
|
genericJDBCLink.setName("first-link");
|
||||||
@ -136,114 +133,23 @@ public void loadTestData() {
|
|||||||
|
|
||||||
@AfterMethod
|
@AfterMethod
|
||||||
public void dropTestData() {
|
public void dropTestData() {
|
||||||
getClient().deleteLink("first-link");
|
for(MJob job : getClient().getJobs()) {
|
||||||
}
|
getClient().deleteJob(job.getName());
|
||||||
|
}
|
||||||
/**
|
for(MLink link : getClient().getLinks()) {
|
||||||
* Correct and poisoned requests that we'll be running with expected responses from the server
|
getClient().deleteLink(link.getName());
|
||||||
*/
|
}
|
||||||
public static TestDescription []PROVDER_DATA = new TestDescription[] {
|
|
||||||
// End point /version/
|
|
||||||
new TestDescription("Valid", "version", "GET", null, new Validator() {
|
|
||||||
@Override
|
|
||||||
void validate() throws Exception {
|
|
||||||
assertResponseCode(200);
|
|
||||||
}}),
|
|
||||||
new TestDescription("Invalid post request", "version", "POST", "Random text", new Validator() {
|
|
||||||
@Override
|
|
||||||
void validate() throws Exception {
|
|
||||||
assertResponseCode(500);
|
|
||||||
assertServerException("org.apache.sqoop.server.common.ServerError", "SERVER_0002");
|
|
||||||
}}),
|
|
||||||
|
|
||||||
// End point /v1/connector
|
|
||||||
new TestDescription("Get all connectors", "v1/connector/all", "GET", null, new Validator() {
|
|
||||||
@Override
|
|
||||||
void validate() throws Exception {
|
|
||||||
assertResponseCode(200);
|
|
||||||
}}),
|
|
||||||
new TestDescription("Get connector by name", "v1/connector/generic-jdbc-connector", "GET", null, new Validator() {
|
|
||||||
@Override
|
|
||||||
void validate() throws Exception {
|
|
||||||
assertResponseCode(200);
|
|
||||||
}}),
|
|
||||||
new TestDescription("Get connector by ID", "v1/connector/1", "GET", null, new Validator() {
|
|
||||||
@Override
|
|
||||||
void validate() throws Exception {
|
|
||||||
assertResponseCode(200);
|
|
||||||
}}),
|
|
||||||
new TestDescription("Get connector by non-existing ID", "v1/connector/666", "GET", null, new Validator() {
|
|
||||||
@Override
|
|
||||||
void validate() throws Exception {
|
|
||||||
assertResponseCode(500);
|
|
||||||
assertServerException("org.apache.sqoop.server.common.ServerError", "SERVER_0006");
|
|
||||||
}}),
|
|
||||||
new TestDescription("Get connector by non-existing name", "v1/connector/jarcecs-cool-connector", "GET", null, new Validator() {
|
|
||||||
@Override
|
|
||||||
void validate() throws Exception {
|
|
||||||
assertResponseCode(500);
|
|
||||||
assertServerException("org.apache.sqoop.server.common.ServerError", "SERVER_0006");
|
|
||||||
}}),
|
|
||||||
new TestDescription("Invalid post request", "v1/connector", "POST", "Random data", new Validator() {
|
|
||||||
@Override
|
|
||||||
void validate() throws Exception {
|
|
||||||
assertResponseCode(500);
|
|
||||||
assertServerException("org.apache.sqoop.server.common.ServerError", "SERVER_0002");
|
|
||||||
}}),
|
|
||||||
|
|
||||||
// End point /v1/link
|
|
||||||
|
|
||||||
// Get
|
|
||||||
new TestDescription("Get all links", "v1/link/all", "GET", null, new Validator() {
|
|
||||||
@Override
|
|
||||||
void validate() throws Exception {
|
|
||||||
assertResponseCode(200);
|
|
||||||
assertContains("first-link");
|
|
||||||
}}),
|
|
||||||
new TestDescription("Get link by name", "v1/link/first-link", "GET", null, new Validator() {
|
|
||||||
@Override
|
|
||||||
void validate() throws Exception {
|
|
||||||
assertResponseCode(200);
|
|
||||||
assertContains("first-link");
|
|
||||||
}}),
|
|
||||||
new TestDescription("Get all links for connector", "v1/link/all?cname=generic-jdbc-connector", "GET", null, new Validator() {
|
|
||||||
@Override
|
|
||||||
void validate() throws Exception {
|
|
||||||
assertResponseCode(200);
|
|
||||||
assertContains("first-link");
|
|
||||||
}}),
|
|
||||||
new TestDescription("Get non existing link", "v1/link/i-dont-exists", "GET", null, new Validator() {
|
|
||||||
@Override
|
|
||||||
void validate() throws Exception {
|
|
||||||
assertResponseCode(500);
|
|
||||||
assertServerException("org.apache.sqoop.server.common.ServerError", "SERVER_0006");
|
|
||||||
assertContains("Invalid link name: i-dont-exists");
|
|
||||||
}}),
|
|
||||||
new TestDescription("Get links for non existing connector", "v1/link/all?cname=i-dont-exists", "GET", null, new Validator() {
|
|
||||||
@Override
|
|
||||||
void validate() throws Exception {
|
|
||||||
assertResponseCode(500);
|
|
||||||
assertServerException("org.apache.sqoop.server.common.ServerError", "SERVER_0005");
|
|
||||||
assertContains("Invalid connector: i-dont-exists");
|
|
||||||
}}),
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
@DataProvider(name="invalid-rest-calls-test", parallel=false)
|
|
||||||
public static Object[][] data() {
|
|
||||||
return Iterables.toArray(ParametrizedUtils.toArrayOfArrays(PROVDER_DATA), Object[].class);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private TestDescription desc;
|
private TestDescription desc;
|
||||||
|
|
||||||
@Factory(dataProvider = "invalid-rest-calls-test")
|
public RestTest(TestDescription desc) {
|
||||||
public InvalidRESTCallsTest(TestDescription desc) {
|
|
||||||
this.desc = desc;
|
this.desc = desc;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getTestName() {
|
public String getTestName() {
|
||||||
return InvalidRESTCallsTest.class.getName() + " " + desc.rest + "[" + desc.method + "]: " + desc.name;
|
return getClass().getName() + " " + desc.rest + "[" + desc.method + "]: " + desc.name;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@ -257,10 +163,10 @@ public void test() throws Exception {
|
|||||||
if(desc.data != null) {
|
if(desc.data != null) {
|
||||||
connection.setDoOutput(true);
|
connection.setDoOutput(true);
|
||||||
|
|
||||||
byte []byteData = desc.data.getBytes(Charset.forName("UTF-8"));
|
byte[] byteData = desc.data.getBytes(Charset.forName("UTF-8"));
|
||||||
connection.setRequestProperty("Content-Length", Integer.toString(byteData.length));
|
connection.setRequestProperty("Content-Length", Integer.toString(byteData.length));
|
||||||
DataOutputStream wr = new DataOutputStream(connection.getOutputStream());
|
DataOutputStream wr = new DataOutputStream(connection.getOutputStream());
|
||||||
wr.write(byteData, byteData.length, 0);
|
wr.write(byteData, 0, byteData.length);
|
||||||
wr.flush();
|
wr.flush();
|
||||||
wr.close();
|
wr.close();
|
||||||
}
|
}
|
@ -0,0 +1,51 @@
|
|||||||
|
/**
|
||||||
|
* 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 org.apache.sqoop.integration.server.rest;
|
||||||
|
|
||||||
|
import org.apache.sqoop.test.utils.ParametrizedUtils;
|
||||||
|
import org.testng.annotations.DataProvider;
|
||||||
|
import org.testng.annotations.Factory;
|
||||||
|
|
||||||
|
import java.util.Iterator;
|
||||||
|
|
||||||
|
public class VersionRestTest extends RestTest {
|
||||||
|
|
||||||
|
public static TestDescription[] PROVIDER_DATA = new TestDescription[]{
|
||||||
|
new TestDescription("Valid", "version", "GET", null, new Validator() {
|
||||||
|
@Override
|
||||||
|
void validate() throws Exception {
|
||||||
|
assertResponseCode(200);
|
||||||
|
}}),
|
||||||
|
new TestDescription("Invalid post request", "version", "POST", "Random text", new Validator() {
|
||||||
|
@Override
|
||||||
|
void validate() throws Exception {
|
||||||
|
assertResponseCode(500);
|
||||||
|
assertServerException("org.apache.sqoop.server.common.ServerError", "SERVER_0002");
|
||||||
|
}}),
|
||||||
|
};
|
||||||
|
|
||||||
|
@DataProvider(name="version-rest-test", parallel=false)
|
||||||
|
public static Iterator<Object[]> data() {
|
||||||
|
return ParametrizedUtils.toArrayOfArrays(PROVIDER_DATA).iterator();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Factory(dataProvider = "version-rest-test")
|
||||||
|
public VersionRestTest(TestDescription desc) {
|
||||||
|
super(desc);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user