You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nifi.apache.org by jo...@apache.org on 2015/04/20 05:13:08 UTC

[31/50] [abbrv] incubator-nifi git commit: NIFI-505: Added more legit unit tests

NIFI-505: Added more legit unit tests


Project: http://git-wip-us.apache.org/repos/asf/incubator-nifi/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-nifi/commit/1963c274
Tree: http://git-wip-us.apache.org/repos/asf/incubator-nifi/tree/1963c274
Diff: http://git-wip-us.apache.org/repos/asf/incubator-nifi/diff/1963c274

Branch: refs/heads/NIFI-271
Commit: 1963c27409d99d2a05a68a8ed5ededd076bf0da7
Parents: c83c7af
Author: Mark Payne <ma...@hotmail.com>
Authored: Fri Apr 10 14:51:27 2015 -0400
Committer: Mark Payne <ma...@hotmail.com>
Committed: Fri Apr 10 14:51:27 2015 -0400

----------------------------------------------------------------------
 .../nifi/processors/yandex/YandexTranslate.java |  32 +++--
 .../processors/yandex/TestYandexTranslate.java  | 135 +++++++++++++++----
 2 files changed, 130 insertions(+), 37 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/1963c274/nifi/nifi-nar-bundles/nifi-language-translation-bundle/nifi-yandex-processors/src/main/java/org/apache/nifi/processors/yandex/YandexTranslate.java
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-language-translation-bundle/nifi-yandex-processors/src/main/java/org/apache/nifi/processors/yandex/YandexTranslate.java b/nifi/nifi-nar-bundles/nifi-language-translation-bundle/nifi-yandex-processors/src/main/java/org/apache/nifi/processors/yandex/YandexTranslate.java
index a5eecc6..bd83a8a 100644
--- a/nifi/nifi-nar-bundles/nifi-language-translation-bundle/nifi-yandex-processors/src/main/java/org/apache/nifi/processors/yandex/YandexTranslate.java
+++ b/nifi/nifi-nar-bundles/nifi-language-translation-bundle/nifi-yandex-processors/src/main/java/org/apache/nifi/processors/yandex/YandexTranslate.java
@@ -92,7 +92,7 @@ public class YandexTranslate extends AbstractProcessor {
 		.name("Input Language")
 		.description("The language of incoming data")
 		.required(true)
-		.defaultValue("sp")
+		.defaultValue("es")
 		.expressionLanguageSupported(true)
 		.addValidator(new LanguageNameValidator())
 		.build();
@@ -213,6 +213,24 @@ public class YandexTranslate extends AbstractProcessor {
     	}
     }
     
+    
+    protected WebResource.Builder prepareResource(final String key, final List<String> text, final String sourceLanguage, final String destLanguage) {
+		WebResource webResource = client.resource(URL);
+		
+		final MultivaluedMap<String, String> paramMap = new MultivaluedMapImpl();
+		paramMap.put("text", text);
+		paramMap.add("key", key);
+		paramMap.add("lang", sourceLanguage + "-" + destLanguage);
+		
+		WebResource.Builder builder = webResource
+				.accept(MediaType.APPLICATION_JSON)
+				.type(MediaType.APPLICATION_FORM_URLENCODED);
+		builder = builder.entity(paramMap);
+		
+		return builder;
+    }
+    
+    
     @Override
     public void onTrigger(final ProcessContext context, final ProcessSession session) throws ProcessException {
 		FlowFile flowFile = session.get();
@@ -247,17 +265,7 @@ public class YandexTranslate extends AbstractProcessor {
 			textValues.add(content);
 		}
 		
-		WebResource webResource = client.resource(URL);
-		
-		final MultivaluedMap<String, String> paramMap = new MultivaluedMapImpl();
-		paramMap.put("text", textValues);
-		paramMap.add("key", key);
-		paramMap.add("lang", sourceLanguage + "-" + targetLanguage);
-		
-		WebResource.Builder builder = webResource
-				.accept(MediaType.APPLICATION_JSON)
-				.type(MediaType.APPLICATION_FORM_URLENCODED);
-		builder = builder.entity(paramMap);
+		final WebResource.Builder builder = prepareResource(key, textValues, sourceLanguage, targetLanguage);
 		
 		final ClientResponse response;
 		try {

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/1963c274/nifi/nifi-nar-bundles/nifi-language-translation-bundle/nifi-yandex-processors/src/test/java/org/apache/nifi/processors/yandex/TestYandexTranslate.java
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-language-translation-bundle/nifi-yandex-processors/src/test/java/org/apache/nifi/processors/yandex/TestYandexTranslate.java b/nifi/nifi-nar-bundles/nifi-language-translation-bundle/nifi-yandex-processors/src/test/java/org/apache/nifi/processors/yandex/TestYandexTranslate.java
index 4f82049..7b38b8b 100644
--- a/nifi/nifi-nar-bundles/nifi-language-translation-bundle/nifi-yandex-processors/src/test/java/org/apache/nifi/processors/yandex/TestYandexTranslate.java
+++ b/nifi/nifi-nar-bundles/nifi-language-translation-bundle/nifi-yandex-processors/src/test/java/org/apache/nifi/processors/yandex/TestYandexTranslate.java
@@ -18,41 +18,100 @@ package org.apache.nifi.processors.yandex;
 
 import static org.junit.Assert.assertEquals;
 
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.Properties;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
-import org.apache.nifi.processors.yandex.YandexTranslate;
+import javax.ws.rs.core.Response.Status.Family;
+import javax.ws.rs.core.Response.StatusType;
+
+import org.apache.nifi.processors.yandex.model.Translation;
 import org.apache.nifi.util.MockFlowFile;
 import org.apache.nifi.util.TestRunner;
 import org.apache.nifi.util.TestRunners;
-import org.junit.Before;
-import org.junit.Ignore;
+import org.junit.BeforeClass;
 import org.junit.Test;
+import org.mockito.Mockito;
+import org.mockito.invocation.InvocationOnMock;
+import org.mockito.stubbing.Answer;
+
+import com.sun.jersey.api.client.ClientResponse;
+import com.sun.jersey.api.client.WebResource;
+import com.sun.jersey.api.client.WebResource.Builder;
 
-@Ignore("For local testing only; requires local file to be populated with Yandex API Key")
 public class TestYandexTranslate {
 
-    private TestRunner testRunner;
-    private String apiKey;
+	private static final Map<String, String> translations = new HashMap<>();
+	
+	@BeforeClass
+	public static void setupTranslationMap() {
+		translations.put("bonjour", "hello");
+		translations.put("traduire", "translate");
+		translations.put("amusant", "fun");
+		translations.put("ordinateur", "computer");
+	}
+	
+    private TestRunner createTestRunner(final int statusCode) {
+    	return TestRunners.newTestRunner(new YandexTranslate() {
+        	@Override
+        	protected Builder prepareResource(final String key, final List<String> text, final String sourceLanguage, final String destLanguage) {
+        		final WebResource.Builder builder = Mockito.mock(WebResource.Builder.class);
+        		
+        		Mockito.doAnswer(new Answer<ClientResponse>() {
+					@Override
+					public ClientResponse answer(final InvocationOnMock invocation) throws Throwable {
+						final ClientResponse response = Mockito.mock(ClientResponse.class);
 
-    @Before
-    public void init() throws IOException {
-        testRunner = TestRunners.newTestRunner(YandexTranslate.class);
-        
-        final Properties properties = new Properties();
-        try (final InputStream in = new FileInputStream(new File("C:/dev/notes/yandex-info.txt"))) {
-        	properties.load(in);
-        }
-        apiKey = properties.getProperty("api_key").trim();
+						final StatusType statusType = new StatusType() {
+							@Override
+							public int getStatusCode() {
+								return statusCode;
+							}
+							
+							@Override
+							public String getReasonPhrase() {
+								return String.valueOf(statusCode);
+							}
+							
+							@Override
+							public Family getFamily() {
+								return statusCode == 200 ? Family.SUCCESSFUL : Family.SERVER_ERROR;
+							}
+						};
+						
+						Mockito.when(response.getStatus()).thenReturn(statusCode);
+						Mockito.when(response.getStatusInfo()).thenReturn(statusType);
+						
+						if ( statusCode == 200 ) {
+							final Translation translation = new Translation();
+							translation.setCode(statusCode);
+							translation.setLang(destLanguage);
+							
+							final List<String> translationList = new ArrayList<>();
+							for ( final String original : text ) {
+								final String translated = translations.get(original);
+								translationList.add(translated == null ? original : translated);
+							}
+							
+							translation.setText(translationList);
+							
+							Mockito.when(response.getEntity(Translation.class)).thenReturn(translation);
+						}
+						
+						return response;
+					}
+        		}).when(builder).post(ClientResponse.class);
+        		return builder;
+        	}
+        });
     }
-
+    
     
     @Test
     public void testTranslateContent() {
-    	testRunner.setProperty(YandexTranslate.KEY, apiKey);
+    	final TestRunner testRunner = createTestRunner(200);
+    	testRunner.setProperty(YandexTranslate.KEY, "a");
     	testRunner.setProperty(YandexTranslate.SOURCE_LANGUAGE, "fr");
     	testRunner.setProperty(YandexTranslate.TARGET_LANGUAGE, "en");
     	testRunner.setProperty(YandexTranslate.TRANSLATE_CONTENT, "true");
@@ -71,7 +130,9 @@ public class TestYandexTranslate {
     
     @Test
     public void testTranslateSingleAttribute() {
-    	testRunner.setProperty(YandexTranslate.KEY, apiKey);
+    	final TestRunner testRunner = createTestRunner(200);
+
+    	testRunner.setProperty(YandexTranslate.KEY, "A");
     	testRunner.setProperty(YandexTranslate.SOURCE_LANGUAGE, "fr");
     	testRunner.setProperty(YandexTranslate.TARGET_LANGUAGE, "en");
     	testRunner.setProperty(YandexTranslate.TRANSLATE_CONTENT, "false");
@@ -90,7 +151,9 @@ public class TestYandexTranslate {
     
     @Test
     public void testTranslateMultipleAttributes() {
-    	testRunner.setProperty(YandexTranslate.KEY, apiKey);
+    	final TestRunner testRunner = createTestRunner(200);
+
+    	testRunner.setProperty(YandexTranslate.KEY, "A");
     	testRunner.setProperty(YandexTranslate.SOURCE_LANGUAGE, "fr");
     	testRunner.setProperty(YandexTranslate.TARGET_LANGUAGE, "en");
     	testRunner.setProperty(YandexTranslate.TRANSLATE_CONTENT, "false");
@@ -114,7 +177,9 @@ public class TestYandexTranslate {
     
     @Test
     public void testTranslateContentAndMultipleAttributes() {
-    	testRunner.setProperty(YandexTranslate.KEY, apiKey);
+    	final TestRunner testRunner = createTestRunner(200);
+
+    	testRunner.setProperty(YandexTranslate.KEY, "A");
     	testRunner.setProperty(YandexTranslate.SOURCE_LANGUAGE, "fr");
     	testRunner.setProperty(YandexTranslate.TARGET_LANGUAGE, "en");
     	testRunner.setProperty(YandexTranslate.TRANSLATE_CONTENT, "true");
@@ -137,5 +202,25 @@ public class TestYandexTranslate {
     	out.assertAttributeEquals("fun", "fun");
     	out.assertAttributeEquals("nifi", "nifi");
     }
+    
+    @Test
+    public void testFailureResponse() {
+    	final TestRunner testRunner = createTestRunner(403);
+
+    	testRunner.setProperty(YandexTranslate.KEY, "A");
+    	testRunner.setProperty(YandexTranslate.SOURCE_LANGUAGE, "fr");
+    	testRunner.setProperty(YandexTranslate.TARGET_LANGUAGE, "en");
+    	testRunner.setProperty(YandexTranslate.TRANSLATE_CONTENT, "true");
+    	testRunner.setProperty(YandexTranslate.CHARACTER_SET, "UTF-8");
+    	testRunner.setProperty("hello", "bonjour");
+    	testRunner.setProperty("translate", "traduire");
+    	testRunner.setProperty("fun", "amusant");
+    	testRunner.setProperty("nifi", "nifi");
+    	
+    	testRunner.enqueue("ordinateur".getBytes());
+    	testRunner.run();
+    	
+    	testRunner.assertAllFlowFilesTransferred(YandexTranslate.REL_TRANSLATION_FAILED, 1);
+    }
 
 }