[ https://issues.apache.org/jira/browse/NIFI-5214?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16499654#comment-16499654 ]
ASF GitHub Bot commented on NIFI-5214: -------------------------------------- Github user ijokarumawak commented on a diff in the pull request: https://github.com/apache/nifi/pull/2723#discussion_r192611673 --- Diff: nifi-nar-bundles/nifi-standard-services/nifi-lookup-services-bundle/nifi-lookup-services/src/test/groovy/org/apache/nifi/lookup/RestLookupServiceIT.groovy --- @@ -0,0 +1,305 @@ +/* + * 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.nifi.lookup + +import org.apache.avro.Schema +import org.apache.nifi.avro.AvroTypeUtil +import org.apache.nifi.json.JsonTreeReader +import org.apache.nifi.lookup.rest.SchemaUtil +import org.apache.nifi.lookup.rest.handlers.BasicAuth +import org.apache.nifi.lookup.rest.handlers.ComplexJson +import org.apache.nifi.lookup.rest.handlers.NoRecord +import org.apache.nifi.lookup.rest.handlers.SimpleJson +import org.apache.nifi.lookup.rest.handlers.SimpleJsonArray +import org.apache.nifi.lookup.rest.handlers.VerbTest +import org.apache.nifi.schema.access.SchemaAccessUtils +import org.apache.nifi.serialization.record.MockSchemaRegistry +import org.apache.nifi.serialization.record.Record +import org.apache.nifi.serialization.record.RecordSchema +import org.apache.nifi.util.TestRunner +import org.apache.nifi.util.TestRunners +import org.apache.nifi.web.util.TestServer +import org.eclipse.jetty.servlet.ServletHandler +import org.junit.Assert +import org.junit.Before +import org.junit.Test + +import static groovy.json.JsonOutput.prettyPrint +import static groovy.json.JsonOutput.toJson + +class RestLookupServiceIT { + static final JsonTreeReader reader + static final MockSchemaRegistry registry = new MockSchemaRegistry() + static final RecordSchema simpleSchema + static final RecordSchema nestedSchema + + TestRunner runner + RestLookupService lookupService + + static { + simpleSchema = AvroTypeUtil.createSchema(new Schema.Parser().parse(SchemaUtil.SIMPLE)) + nestedSchema = AvroTypeUtil.createSchema(new Schema.Parser().parse(SchemaUtil.COMPLEX)) + registry.addSchema("simple", simpleSchema) + registry.addSchema("complex", nestedSchema) + + reader = new JsonTreeReader() + } + + @Before + void setup() { + lookupService = new RestLookupService() + + runner = TestRunners.newTestRunner(TestRestLookupServiceProcessor.class) + runner.addControllerService("jsonReader", reader) + runner.addControllerService("registry", registry) + runner.addControllerService("lookupService", lookupService) + runner.setProperty(reader, SchemaAccessUtils.SCHEMA_REGISTRY, "registry") + runner.setProperty(lookupService, SchemaAccessUtils.SCHEMA_REGISTRY, "registry") + runner.setProperty(lookupService, RestLookupService.RECORD_READER, "jsonReader") + runner.setProperty(TestRestLookupServiceProcessor.CLIENT_SERVICE, "lookupService") + runner.enableControllerService(registry) + runner.enableControllerService(reader) + runner.enableControllerService(lookupService) + + runner.assertValid() + } + + @Test + void basicAuth() { + runner.disableControllerService(lookupService) + runner.setProperty(lookupService, RestLookupService.PROP_BASIC_AUTH_USERNAME, "john.smith") + runner.setProperty(lookupService, RestLookupService.PROP_BASIC_AUTH_PASSWORD, "testing1234") + runner.enableControllerService(lookupService) + + TestServer server = new TestServer() + server.addHandler(new BasicAuth()) + try { + server.startServer() + def coordinates = [ + "schema.name": "simple", + "endpoint": server.url + "/simple", + "mime.type": "application/json", + "request.method": "get" + ] + + Optional<Record> response = lookupService.lookup(coordinates) + Assert.assertTrue(response.isPresent()) + def record = response.get() + Assert.assertEquals("john.smith", record.getAsString("username")) + Assert.assertEquals("testing1234", record.getAsString("password")) + + Throwable t + try { + runner.disableControllerService(lookupService) + runner.setProperty(lookupService, RestLookupService.PROP_BASIC_AUTH_USERNAME, "john.smith2") + runner.setProperty(lookupService, RestLookupService.PROP_BASIC_AUTH_PASSWORD, ":wetadfasdfadf") + runner.enableControllerService(lookupService) + + lookupService.lookup(coordinates) + } catch (Throwable lfe) { + t = lfe + } + + Assert.assertNotNull(t) + Assert.assertTrue(t.getClass().getCanonicalName(), t instanceof LookupFailureException) + } finally { + server.shutdownServer() + } + } + + @Test + void simpleJson() { + TestServer server = new TestServer() + ServletHandler handler = new ServletHandler() + handler.addServletWithMapping(SimpleJson.class, "/simple") + server.addHandler(handler) + try { + server.startServer() + def coordinates = [ + "schema.name": "simple", + "endpoint": server.url + "/simple", + "mime.type": "application/json", + "request.method": "get" + ] + + Optional<Record> response = lookupService.lookup(coordinates) + Assert.assertTrue(response.isPresent()) + def record = response.get() + Assert.assertEquals("john.smith", record.getAsString("username")) + Assert.assertEquals("testing1234", record.getAsString("password")) + } finally { + server.shutdownServer() + } + } + + @Test + void noRecord() { + TestServer server = new TestServer() + ServletHandler handler = new ServletHandler() + handler.addServletWithMapping(NoRecord.class, "/simple") + server.addHandler(handler) + try { + server.startServer() + def coordinates = [ + "schema.name": "simple", + "endpoint": server.url + "/simple", + "mime.type": "application/json", + "request.method": "get" + ] + + Optional<Record> response = lookupService.lookup(coordinates) + Assert.assertTrue(response.isPresent()) + def record = response.get() + Assert.assertNull(record.getAsString("username")) + Assert.assertNull(record.getAsString("password")) + } finally { + server.shutdownServer() + } + } + + @Test + void simpleJsonArray() { + TestServer server = new TestServer() + ServletHandler handler = new ServletHandler() + handler.addServletWithMapping(SimpleJsonArray.class, "/simple_array") + server.addHandler(handler) + try { + server.startServer() + def coordinates = [ + "schema.name": "simple", + "endpoint": server.url + "/simple_array", + "mime.type": "application/json", + "request.method": "get" + ] + + Optional<Record> response = lookupService.lookup(coordinates) + Assert.assertTrue(response.isPresent()) + def record = response.get() + Assert.assertEquals("john.smith", record.getAsString("username")) + Assert.assertEquals("testing1234", record.getAsString("password")) + } finally { + server.shutdownServer() + } + } + + @Test + void testHeaders() { + runner.disableControllerService(lookupService) + runner.setProperty(lookupService, "X-USER", "jane.doe") + runner.setProperty(lookupService, "X-PASS", "testing7890") + runner.enableControllerService(lookupService) + + TestServer server = new TestServer() + ServletHandler handler = new ServletHandler() + handler.addServletWithMapping(SimpleJson.class, "/simple") + server.addHandler(handler) + try { + server.startServer() + + def coordinates = [ + "schema.name": "simple", + "endpoint": server.url + "/simple", + "mime.type": "application/json", + "request.method": "get" + ] + + Optional<Record> response = lookupService.lookup(coordinates) + Assert.assertTrue(response.isPresent()) + def record = response.get() + Assert.assertEquals("jane.doe", record.getAsString("username")) + Assert.assertEquals("testing7890", record.getAsString("password")) + } finally { + server.shutdownServer() + } + } + + @Test + void complexJson() { + runner.disableControllerService(lookupService) + runner.setProperty(lookupService, RestLookupService.RECORD_PATH, "/top/middle/inner") + runner.enableControllerService(lookupService) + + TestServer server = new TestServer() + ServletHandler handler = new ServletHandler() + handler.addServletWithMapping(ComplexJson.class, "/complex") + server.addHandler(handler) + try { + server.startServer() + def coordinates = [ + "schema.name": "complex", + "endpoint": server.url + "/complex", + "mime.type": "application/json", + "request.method": "get" + ] + + Optional<Record> response = lookupService.lookup(coordinates) + Assert.assertTrue(response.isPresent()) + def record = response.get() + Assert.assertEquals("jane.doe", record.getAsString("username")) + Assert.assertEquals("testing7890", record.getAsString("password")) + Assert.assertEquals("jane....@company.com", record.getAsString("email")) --- End diff -- The domain `company.com` actually exists. Please change it to `example.com`. > Add a REST lookup service > ------------------------- > > Key: NIFI-5214 > URL: https://issues.apache.org/jira/browse/NIFI-5214 > Project: Apache NiFi > Issue Type: New Feature > Reporter: Mike Thomsen > Assignee: Mike Thomsen > Priority: Major > > * Should have reader API support > * Should be able to drill down through complex XML and JSON responses to a > nested record. -- This message was sent by Atlassian JIRA (v7.6.3#76005)