You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pulsar.apache.org by mm...@apache.org on 2019/06/28 18:49:50 UTC
[pulsar] branch master updated: Adding null check for
function/source/sink configs (#4627)
This is an automated email from the ASF dual-hosted git repository.
mmerli pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/pulsar.git
The following commit(s) were added to refs/heads/master by this push:
new ed7cdca Adding null check for function/source/sink configs (#4627)
ed7cdca is described below
commit ed7cdca549ffc56a2ed833181a69bd483cbf06c9
Author: Boyang Jerry Peng <je...@gmail.com>
AuthorDate: Fri Jun 28 11:49:46 2019 -0700
Adding null check for function/source/sink configs (#4627)
* Adding null check for function/source/sink configs
* adding more checks
* fix tests
---
.../functions/worker/rest/api/ComponentImpl.java | 8 ++---
.../functions/worker/rest/api/FunctionsImpl.java | 10 ++++--
.../functions/worker/rest/api/SinksImpl.java | 10 ++++--
.../functions/worker/rest/api/SourcesImpl.java | 10 ++++--
.../rest/api/v2/FunctionApiV2ResourceTest.java | 10 +++---
.../rest/api/v3/FunctionApiV3ResourceTest.java | 38 +++++++++++++++++++---
.../worker/rest/api/v3/SinkApiV3ResourceTest.java | 37 ++++++++++++++++++---
.../rest/api/v3/SourceApiV3ResourceTest.java | 37 ++++++++++++++++++---
8 files changed, 130 insertions(+), 30 deletions(-)
diff --git a/pulsar-functions/worker/src/main/java/org/apache/pulsar/functions/worker/rest/api/ComponentImpl.java b/pulsar-functions/worker/src/main/java/org/apache/pulsar/functions/worker/rest/api/ComponentImpl.java
index 345ea56..4b9a655 100644
--- a/pulsar-functions/worker/src/main/java/org/apache/pulsar/functions/worker/rest/api/ComponentImpl.java
+++ b/pulsar-functions/worker/src/main/java/org/apache/pulsar/functions/worker/rest/api/ComponentImpl.java
@@ -1253,7 +1253,7 @@ public abstract class ComponentImpl {
throw new IllegalArgumentException("Namespace is not provided");
}
if (subject == null) {
- throw new IllegalArgumentException(ComponentTypeUtils.toString(componentType) + " Name is not provided");
+ throw new IllegalArgumentException(ComponentTypeUtils.toString(componentType) + " name is not provided");
}
}
@@ -1267,7 +1267,7 @@ public abstract class ComponentImpl {
throw new IllegalArgumentException("Namespace is not provided");
}
if (subject == null) {
- throw new IllegalArgumentException(ComponentTypeUtils.toString(componentType) + " Name is not provided");
+ throw new IllegalArgumentException(ComponentTypeUtils.toString(componentType) + " name is not provided");
}
}
@@ -1284,7 +1284,7 @@ public abstract class ComponentImpl {
throw new IllegalArgumentException("Namespace is not provided");
}
if (functionName == null) {
- throw new IllegalArgumentException("Function Name is not provided");
+ throw new IllegalArgumentException(ComponentTypeUtils.toString(componentType) + " name is not provided");
}
if (key == null) {
throw new IllegalArgumentException("Key is not provided");
@@ -1324,7 +1324,7 @@ public abstract class ComponentImpl {
throw new IllegalArgumentException("Namespace is not provided");
}
if (functionName == null) {
- throw new IllegalArgumentException("Function Name is not provided");
+ throw new IllegalArgumentException("Function name is not provided");
}
if (uploadedInputStream == null && input == null) {
throw new IllegalArgumentException("Trigger Data is not provided");
diff --git a/pulsar-functions/worker/src/main/java/org/apache/pulsar/functions/worker/rest/api/FunctionsImpl.java b/pulsar-functions/worker/src/main/java/org/apache/pulsar/functions/worker/rest/api/FunctionsImpl.java
index da86189..3cfb3ae 100644
--- a/pulsar-functions/worker/src/main/java/org/apache/pulsar/functions/worker/rest/api/FunctionsImpl.java
+++ b/pulsar-functions/worker/src/main/java/org/apache/pulsar/functions/worker/rest/api/FunctionsImpl.java
@@ -87,7 +87,10 @@ public class FunctionsImpl extends ComponentImpl {
throw new RestException(Response.Status.BAD_REQUEST, "Namespace is not provided");
}
if (functionName == null) {
- throw new RestException(Response.Status.BAD_REQUEST, ComponentTypeUtils.toString(componentType) + " Name is not provided");
+ throw new RestException(Response.Status.BAD_REQUEST, "Function name is not provided");
+ }
+ if (functionConfig == null) {
+ throw new RestException(Response.Status.BAD_REQUEST, "Function config is not provided");
}
try {
@@ -248,7 +251,10 @@ public class FunctionsImpl extends ComponentImpl {
throw new RestException(Response.Status.BAD_REQUEST, "Namespace is not provided");
}
if (functionName == null) {
- throw new RestException(Response.Status.BAD_REQUEST, ComponentTypeUtils.toString(componentType) + " Name is not provided");
+ throw new RestException(Response.Status.BAD_REQUEST, "Function name is not provided");
+ }
+ if (functionConfig == null) {
+ throw new RestException(Response.Status.BAD_REQUEST, "Function config is not provided");
}
try {
diff --git a/pulsar-functions/worker/src/main/java/org/apache/pulsar/functions/worker/rest/api/SinksImpl.java b/pulsar-functions/worker/src/main/java/org/apache/pulsar/functions/worker/rest/api/SinksImpl.java
index 504722f..ea6f33c 100644
--- a/pulsar-functions/worker/src/main/java/org/apache/pulsar/functions/worker/rest/api/SinksImpl.java
+++ b/pulsar-functions/worker/src/main/java/org/apache/pulsar/functions/worker/rest/api/SinksImpl.java
@@ -89,7 +89,10 @@ public class SinksImpl extends ComponentImpl {
throw new RestException(Response.Status.BAD_REQUEST, "Namespace is not provided");
}
if (sinkName == null) {
- throw new RestException(Response.Status.BAD_REQUEST, ComponentTypeUtils.toString(componentType) + " Name is not provided");
+ throw new RestException(Response.Status.BAD_REQUEST, "Sink name is not provided");
+ }
+ if (sinkConfig == null) {
+ throw new RestException(Response.Status.BAD_REQUEST, "Sink config is not provided");
}
try {
@@ -250,7 +253,10 @@ public class SinksImpl extends ComponentImpl {
throw new RestException(Response.Status.BAD_REQUEST, "Namespace is not provided");
}
if (sinkName == null) {
- throw new RestException(Response.Status.BAD_REQUEST, ComponentTypeUtils.toString(componentType) + " Name is not provided");
+ throw new RestException(Response.Status.BAD_REQUEST, "Sink name is not provided");
+ }
+ if (sinkConfig == null) {
+ throw new RestException(Response.Status.BAD_REQUEST, "Sink config is not provided");
}
try {
diff --git a/pulsar-functions/worker/src/main/java/org/apache/pulsar/functions/worker/rest/api/SourcesImpl.java b/pulsar-functions/worker/src/main/java/org/apache/pulsar/functions/worker/rest/api/SourcesImpl.java
index 15a26aa..71ae375 100644
--- a/pulsar-functions/worker/src/main/java/org/apache/pulsar/functions/worker/rest/api/SourcesImpl.java
+++ b/pulsar-functions/worker/src/main/java/org/apache/pulsar/functions/worker/rest/api/SourcesImpl.java
@@ -89,7 +89,10 @@ public class SourcesImpl extends ComponentImpl {
throw new RestException(Response.Status.BAD_REQUEST, "Namespace is not provided");
}
if (sourceName == null) {
- throw new RestException(Response.Status.BAD_REQUEST, ComponentTypeUtils.toString(componentType) + " Name is not provided");
+ throw new RestException(Response.Status.BAD_REQUEST, "Source name is not provided");
+ }
+ if (sourceConfig == null) {
+ throw new RestException(Response.Status.BAD_REQUEST, "Source config is not provided");
}
try {
@@ -250,7 +253,10 @@ public class SourcesImpl extends ComponentImpl {
throw new RestException(Response.Status.BAD_REQUEST, "Namespace is not provided");
}
if (sourceName == null) {
- throw new RestException(Response.Status.BAD_REQUEST, ComponentTypeUtils.toString(componentType) + " Name is not provided");
+ throw new RestException(Response.Status.BAD_REQUEST, "Source name is not provided");
+ }
+ if (sourceConfig == null) {
+ throw new RestException(Response.Status.BAD_REQUEST, "Source config is not provided");
}
try {
diff --git a/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/rest/api/v2/FunctionApiV2ResourceTest.java b/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/rest/api/v2/FunctionApiV2ResourceTest.java
index 4405c21..62cba58 100644
--- a/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/rest/api/v2/FunctionApiV2ResourceTest.java
+++ b/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/rest/api/v2/FunctionApiV2ResourceTest.java
@@ -234,7 +234,7 @@ public class FunctionApiV2ResourceTest {
}
}
- @Test(expectedExceptions = RestException.class, expectedExceptionsMessageRegExp = "Function Name is not provided")
+ @Test(expectedExceptions = RestException.class, expectedExceptionsMessageRegExp = "Function name is not provided")
public void testRegisterFunctionMissingFunctionName() {
try {
testRegisterFunctionMissingArguments(
@@ -712,7 +712,7 @@ public class FunctionApiV2ResourceTest {
}
}
- @Test(expectedExceptions = RestException.class, expectedExceptionsMessageRegExp = "Function Name is not provided")
+ @Test(expectedExceptions = RestException.class, expectedExceptionsMessageRegExp = "Function name is not provided")
public void testUpdateFunctionMissingFunctionName() {
try {
testUpdateFunctionMissingArguments(
@@ -726,7 +726,7 @@ public class FunctionApiV2ResourceTest {
outputSerdeClassName,
className,
parallelism,
- "Function Name is not provided");
+ "Function name is not provided");
} catch (RestException re) {
assertEquals(re.getResponse().getStatusInfo(), Response.Status.BAD_REQUEST);
throw re;
@@ -1155,7 +1155,7 @@ public class FunctionApiV2ResourceTest {
}
}
- @Test(expectedExceptions = RestException.class, expectedExceptionsMessageRegExp = "Function Name is not provided")
+ @Test(expectedExceptions = RestException.class, expectedExceptionsMessageRegExp = "Function name is not provided")
public void testDeregisterFunctionMissingFunctionName() {
try {
testDeregisterFunctionMissingArguments(
@@ -1282,7 +1282,7 @@ public class FunctionApiV2ResourceTest {
}
}
- @Test(expectedExceptions = RestException.class, expectedExceptionsMessageRegExp = "Function Name is not provided")
+ @Test(expectedExceptions = RestException.class, expectedExceptionsMessageRegExp = "Function name is not provided")
public void testGetFunctionMissingFunctionName() throws IOException {
try {
testGetFunctionMissingArguments(
diff --git a/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/rest/api/v3/FunctionApiV3ResourceTest.java b/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/rest/api/v3/FunctionApiV3ResourceTest.java
index b3b673b..635e4e6 100644
--- a/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/rest/api/v3/FunctionApiV3ResourceTest.java
+++ b/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/rest/api/v3/FunctionApiV3ResourceTest.java
@@ -227,7 +227,7 @@ public class FunctionApiV3ResourceTest {
}
}
- @Test(expectedExceptions = RestException.class, expectedExceptionsMessageRegExp = "Function Name is not provided")
+ @Test(expectedExceptions = RestException.class, expectedExceptionsMessageRegExp = "Function name is not provided")
public void testRegisterFunctionMissingFunctionName() {
try {
testRegisterFunctionMissingArguments(
@@ -489,6 +489,34 @@ public class FunctionApiV3ResourceTest {
}
+ @Test(expectedExceptions = RestException.class, expectedExceptionsMessageRegExp = "Function config is not provided")
+ public void testMissingFunctionConfig() {
+ resource.registerFunction(
+ tenant,
+ namespace,
+ function,
+ mockedInputStream,
+ mockedFormData,
+ null,
+ null,
+ null, null);
+ }
+
+ @Test(expectedExceptions = RestException.class, expectedExceptionsMessageRegExp = "Function config is not provided")
+ public void testUpdateMissingFunctionConfig() {
+ when(mockedManager.containsFunction(eq(tenant), eq(namespace), eq(function))).thenReturn(true);
+
+ resource.updateFunction(
+ tenant,
+ namespace,
+ function,
+ mockedInputStream,
+ mockedFormData,
+ null,
+ null,
+ null, null, null);
+ }
+
private void registerDefaultFunction() {
FunctionConfig functionConfig = createDefaultFunctionConfig();
resource.registerFunction(
@@ -683,7 +711,7 @@ public class FunctionApiV3ResourceTest {
}
}
- @Test(expectedExceptions = RestException.class, expectedExceptionsMessageRegExp = "Function Name is not provided")
+ @Test(expectedExceptions = RestException.class, expectedExceptionsMessageRegExp = "Function name is not provided")
public void testUpdateFunctionMissingFunctionName() {
try {
testUpdateFunctionMissingArguments(
@@ -697,7 +725,7 @@ public class FunctionApiV3ResourceTest {
outputSerdeClassName,
className,
parallelism,
- "Function Name is not provided");
+ "Function name is not provided");
} catch (RestException re) {
assertEquals(re.getResponse().getStatusInfo(), Response.Status.BAD_REQUEST);
throw re;
@@ -1112,7 +1140,7 @@ public class FunctionApiV3ResourceTest {
}
}
- @Test(expectedExceptions = RestException.class, expectedExceptionsMessageRegExp = "Function Name is not provided")
+ @Test(expectedExceptions = RestException.class, expectedExceptionsMessageRegExp = "Function name is not provided")
public void testDeregisterFunctionMissingFunctionName() {
try {
testDeregisterFunctionMissingArguments(
@@ -1239,7 +1267,7 @@ public class FunctionApiV3ResourceTest {
}
}
- @Test(expectedExceptions = RestException.class, expectedExceptionsMessageRegExp = "Function Name is not provided")
+ @Test(expectedExceptions = RestException.class, expectedExceptionsMessageRegExp = "Function name is not provided")
public void testGetFunctionMissingFunctionName() {
try {
testGetFunctionMissingArguments(
diff --git a/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/rest/api/v3/SinkApiV3ResourceTest.java b/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/rest/api/v3/SinkApiV3ResourceTest.java
index c884835..793e9cd 100644
--- a/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/rest/api/v3/SinkApiV3ResourceTest.java
+++ b/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/rest/api/v3/SinkApiV3ResourceTest.java
@@ -224,7 +224,7 @@ public class SinkApiV3ResourceTest {
}
}
- @Test(expectedExceptions = RestException.class, expectedExceptionsMessageRegExp = "Sink Name is not provided")
+ @Test(expectedExceptions = RestException.class, expectedExceptionsMessageRegExp = "Sink name is not provided")
public void testRegisterSinkMissingSinkName() {
try {
testRegisterSinkMissingArguments(
@@ -446,6 +446,33 @@ public class SinkApiV3ResourceTest {
}
+ @Test(expectedExceptions = RestException.class, expectedExceptionsMessageRegExp = "Sink config is not provided")
+ public void testMissingSinkConfig() {
+ resource.registerSink(
+ tenant,
+ namespace,
+ sink,
+ mockedInputStream,
+ mockedFormData,
+ null,
+ null,
+ null, null);
+ }
+
+ @Test(expectedExceptions = RestException.class, expectedExceptionsMessageRegExp = "Sink config is not provided")
+ public void testUpdateMissingSinkConfig() {
+ when(mockedManager.containsFunction(eq(tenant), eq(namespace), eq(sink))).thenReturn(true);
+ resource.updateSink(
+ tenant,
+ namespace,
+ sink,
+ mockedInputStream,
+ mockedFormData,
+ null,
+ null,
+ null, null, null);
+ }
+
private void registerDefaultSink() throws IOException {
SinkConfig sinkConfig = createDefaultSinkConfig();
resource.registerSink(
@@ -653,7 +680,7 @@ public class SinkApiV3ResourceTest {
}
}
- @Test(expectedExceptions = RestException.class, expectedExceptionsMessageRegExp = "Sink Name is not provided")
+ @Test(expectedExceptions = RestException.class, expectedExceptionsMessageRegExp = "Sink name is not provided")
public void testUpdateSinkMissingFunctionName() throws Exception {
try {
testUpdateSinkMissingArguments(
@@ -665,7 +692,7 @@ public class SinkApiV3ResourceTest {
topicsToSerDeClassName,
className,
parallelism,
- "Sink Name is not provided");
+ "Sink name is not provided");
} catch (RestException re){
assertEquals(re.getResponse().getStatusInfo(), Response.Status.BAD_REQUEST);
throw re;
@@ -1063,7 +1090,7 @@ public class SinkApiV3ResourceTest {
}
}
- @Test(expectedExceptions = RestException.class, expectedExceptionsMessageRegExp = "Sink Name is not provided")
+ @Test(expectedExceptions = RestException.class, expectedExceptionsMessageRegExp = "Sink name is not provided")
public void testDeregisterSinkMissingFunctionName() {
try {
testDeregisterSinkMissingArguments(
@@ -1190,7 +1217,7 @@ public class SinkApiV3ResourceTest {
}
}
- @Test(expectedExceptions = RestException.class, expectedExceptionsMessageRegExp = "Sink Name is not provided")
+ @Test(expectedExceptions = RestException.class, expectedExceptionsMessageRegExp = "Sink name is not provided")
public void testGetSinkMissingFunctionName() {
try {
diff --git a/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/rest/api/v3/SourceApiV3ResourceTest.java b/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/rest/api/v3/SourceApiV3ResourceTest.java
index 875e2ef..17b4595 100644
--- a/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/rest/api/v3/SourceApiV3ResourceTest.java
+++ b/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/rest/api/v3/SourceApiV3ResourceTest.java
@@ -221,7 +221,7 @@ public class SourceApiV3ResourceTest {
}
}
- @Test(expectedExceptions = RestException.class, expectedExceptionsMessageRegExp = "Source Name is not provided")
+ @Test(expectedExceptions = RestException.class, expectedExceptionsMessageRegExp = "Source name is not provided")
public void testRegisterSourceMissingSourceName() {
try {
testRegisterSourceMissingArguments(
@@ -416,6 +416,33 @@ public class SourceApiV3ResourceTest {
}
+ @Test(expectedExceptions = RestException.class, expectedExceptionsMessageRegExp = "Source config is not provided")
+ public void testMissingSinkConfig() {
+ resource.registerSource(
+ tenant,
+ namespace,
+ source,
+ mockedInputStream,
+ mockedFormData,
+ null,
+ null,
+ null, null);
+ }
+
+ @Test(expectedExceptions = RestException.class, expectedExceptionsMessageRegExp = "Source config is not provided")
+ public void testUpdateMissingSinkConfig() {
+ when(mockedManager.containsFunction(eq(tenant), eq(namespace), eq(source))).thenReturn(true);
+ resource.updateSource(
+ tenant,
+ namespace,
+ source,
+ mockedInputStream,
+ mockedFormData,
+ null,
+ null,
+ null, null, null);
+ }
+
private void registerDefaultSource() throws IOException {
SourceConfig sourceConfig = createDefaultSourceConfig();
resource.registerSource(
@@ -625,7 +652,7 @@ public class SourceApiV3ResourceTest {
}
}
- @Test(expectedExceptions = RestException.class, expectedExceptionsMessageRegExp = "Source Name is not provided")
+ @Test(expectedExceptions = RestException.class, expectedExceptionsMessageRegExp = "Source name is not provided")
public void testUpdateSourceMissingFunctionName() throws Exception {
try {
testUpdateSourceMissingArguments(
@@ -638,7 +665,7 @@ public class SourceApiV3ResourceTest {
outputSerdeClassName,
className,
parallelism,
- "Source Name is not provided");
+ "Source name is not provided");
} catch (RestException re){
assertEquals(re.getResponse().getStatusInfo(), Response.Status.BAD_REQUEST);
throw re;
@@ -1084,7 +1111,7 @@ public class SourceApiV3ResourceTest {
}
}
- @Test(expectedExceptions = RestException.class, expectedExceptionsMessageRegExp = "Source Name is not provided")
+ @Test(expectedExceptions = RestException.class, expectedExceptionsMessageRegExp = "Source name is not provided")
public void testDeregisterSourceMissingFunctionName() {
try {
testDeregisterSourceMissingArguments(
@@ -1215,7 +1242,7 @@ public class SourceApiV3ResourceTest {
}
}
- @Test(expectedExceptions = RestException.class, expectedExceptionsMessageRegExp = "Source Name is not provided")
+ @Test(expectedExceptions = RestException.class, expectedExceptionsMessageRegExp = "Source name is not provided")
public void testGetSourceMissingFunctionName() {
try {
testGetSourceMissingArguments(