Java Code Examples for org.apache.flume.Channel#put()
The following examples show how to use
org.apache.flume.Channel#put() .
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: TestAsyncHBaseSink.java From mt-flume with Apache License 2.0 | 6 votes |
@Test (expected = EventDeliveryException.class) public void testTimeOut() throws Exception { testUtility.createTable(tableName.getBytes(), columnFamily.getBytes()); deleteTable = true; AsyncHBaseSink sink = new AsyncHBaseSink(testUtility.getConfiguration(), true); Configurables.configure(sink, ctx); Channel channel = new MemoryChannel(); Configurables.configure(channel, ctx); sink.setChannel(channel); sink.start(); Transaction tx = channel.getTransaction(); tx.begin(); for(int i = 0; i < 3; i++){ Event e = EventBuilder.withBody(Bytes.toBytes(valBase + "-" + i)); channel.put(e); } tx.commit(); tx.close(); Assert.assertFalse(sink.isConfNull()); sink.process(); Assert.fail(); }
Example 2
Source File: TestElasticSearchSink.java From ingestion with Apache License 2.0 | 5 votes |
@Ignore @Test public void shouldIndexComplexJsonEvent() throws Exception { Configurables.configure(fixture, new Context(parameters)); Channel channel = bindAndStartChannel(fixture); Transaction tx = channel.getTransaction(); tx.begin(); Event event = EventBuilder.withBody( "{\"event\":\"json content\",\"num\":1}".getBytes()); channel.put(event); tx.commit(); tx.close(); fixture.process(); fixture.stop(); client.admin().indices() .refresh(Requests.refreshRequest(timestampedIndexName)).actionGet(); Map<String, Object> expectedBody = new HashMap<String, Object>(); expectedBody.put("event", "json content"); expectedBody.put("num", 1); assertSearch(1, performSearch(QueryBuilders.matchAllQuery()), expectedBody, event); assertSearch(1, performSearch(QueryBuilders.fieldQuery("@message.event", "json")), expectedBody, event); }
Example 3
Source File: TestElasticSearchSink.java From ingestion with Apache License 2.0 | 5 votes |
@Ignore @Test public void shouldIndexInvalidComplexJsonBody() throws Exception { parameters.put(BATCH_SIZE, "3"); Configurables.configure(fixture, new Context(parameters)); Channel channel = bindAndStartChannel(fixture); Transaction tx = channel.getTransaction(); tx.begin(); Event event1 = EventBuilder.withBody("TEST1 {test}".getBytes()); channel.put(event1); Event event2 = EventBuilder.withBody("{test: TEST2 }".getBytes()); channel.put(event2); Event event3 = EventBuilder.withBody("{\"test\":{ TEST3 {test} }}".getBytes()); channel.put(event3); tx.commit(); tx.close(); fixture.process(); fixture.stop(); client.admin().indices() .refresh(Requests.refreshRequest(timestampedIndexName)).actionGet(); assertMatchAllQuery(3); assertSearch(1, performSearch(QueryBuilders.fieldQuery("@message", "TEST1")), null, event1); assertSearch(1, performSearch(QueryBuilders.fieldQuery("@message", "TEST2")), null, event2); assertSearch(1, performSearch(QueryBuilders.fieldQuery("@message", "TEST3")), null, event3); }
Example 4
Source File: TestLoadBalancingSinkProcessor.java From mt-flume with Apache License 2.0 | 5 votes |
@Test public void testRoundRobinNoFailure() throws Exception { Channel ch = new MockChannel(); int n = 100; int numEvents = 3*n; for (int i = 0; i < numEvents; i++) { ch.put(new MockEvent("test" + i)); } MockSink s1 = new MockSink(1); s1.setChannel(ch); MockSink s2 = new MockSink(2); s2.setChannel(ch); MockSink s3 = new MockSink(3); s3.setChannel(ch); List<Sink> sinks = new ArrayList<Sink>(); sinks.add(s1); sinks.add(s2); sinks.add(s3); LoadBalancingSinkProcessor lbsp = getProcessor("round_robin",sinks, false); Status s = Status.READY; while (s != Status.BACKOFF) { s = lbsp.process(); } Assert.assertTrue(s1.getEvents().size() == n); Assert.assertTrue(s2.getEvents().size() == n); Assert.assertTrue(s3.getEvents().size() == n); }
Example 5
Source File: TestRegexEventSerializer.java From phoenix with BSD 3-Clause "New" or "Revised" License | 5 votes |
@Test public void testMismatchKeyGenerator() throws EventDeliveryException, SQLException { final String fullTableName = "FLUME_TEST"; initSinkContextWithDefaults(fullTableName); setConfig(FlumeConstants.CONFIG_SERIALIZER_PREFIX + FlumeConstants.CONFIG_ROWKEY_TYPE_GENERATOR,DefaultKeyGenerator.UUID.name()); sink = new PhoenixSink(); Configurables.configure(sink, sinkContext); assertEquals(LifecycleState.IDLE, sink.getLifecycleState()); final Channel channel = this.initChannel(); sink.setChannel(channel); sink.start(); final String eventBody = "val1\tval2"; final Event event = EventBuilder.withBody(Bytes.toBytes(eventBody)); // put event in channel Transaction transaction = channel.getTransaction(); transaction.begin(); channel.put(event); transaction.commit(); transaction.close(); try { sink.process(); fail(); }catch(Exception ex){ assertTrue(ex.getCause().getMessage().contains("java.text.ParseException: Unparseable date:")); } }
Example 6
Source File: TestRegexEventSerializer.java From phoenix with BSD 3-Clause "New" or "Revised" License | 5 votes |
@Test public void testKeyGenerator() throws EventDeliveryException, SQLException { final String fullTableName = "FLUME_TEST"; initSinkContextWithDefaults(fullTableName); sink = new PhoenixSink(); Configurables.configure(sink, sinkContext); assertEquals(LifecycleState.IDLE, sink.getLifecycleState()); final Channel channel = this.initChannel(); sink.setChannel(channel); sink.start(); final String eventBody = "val1\tval2"; final Event event = EventBuilder.withBody(Bytes.toBytes(eventBody)); // put event in channel Transaction transaction = channel.getTransaction(); transaction.begin(); channel.put(event); transaction.commit(); transaction.close(); sink.process(); int rowsInDb = countRows(fullTableName); assertEquals(1 , rowsInDb); sink.stop(); assertEquals(LifecycleState.STOP, sink.getLifecycleState()); }
Example 7
Source File: TestElasticSearchSink.java From mt-flume with Apache License 2.0 | 5 votes |
@Test public void shouldIndexFiveEvents() throws Exception { // Make it so we only need to call process once parameters.put(BATCH_SIZE, "5"); Configurables.configure(fixture, new Context(parameters)); Channel channel = bindAndStartChannel(fixture); int numberOfEvents = 5; Event[] events = new Event[numberOfEvents]; Transaction tx = channel.getTransaction(); tx.begin(); for (int i = 0; i < numberOfEvents; i++) { String body = "event #" + i + " of " + numberOfEvents; Event event = EventBuilder.withBody(body.getBytes()); events[i] = event; channel.put(event); } tx.commit(); tx.close(); fixture.process(); fixture.stop(); client.admin().indices() .refresh(Requests.refreshRequest(timestampedIndexName)).actionGet(); assertMatchAllQuery(numberOfEvents, events); assertBodyQuery(5, events); }
Example 8
Source File: TestElasticSearchSink.java From mt-flume with Apache License 2.0 | 5 votes |
@Test public void shouldAllowCustomElasticSearchIndexRequestBuilderFactory() throws Exception { parameters.put(SERIALIZER, CustomElasticSearchIndexRequestBuilderFactory.class.getName()); Configurables.configure(fixture, new Context(parameters)); Channel channel = bindAndStartChannel(fixture); Transaction tx = channel.getTransaction(); tx.begin(); String body = "{ foo: \"bar\" }"; Event event = EventBuilder.withBody(body.getBytes()); channel.put(event); tx.commit(); tx.close(); fixture.process(); fixture.stop(); assertEquals(fixture.getIndexName()+"-05_17_36_789", CustomElasticSearchIndexRequestBuilderFactory.actualIndexName); assertEquals(fixture.getIndexType(), CustomElasticSearchIndexRequestBuilderFactory.actualIndexType); assertArrayEquals(event.getBody(), CustomElasticSearchIndexRequestBuilderFactory.actualEventBody); assertTrue(CustomElasticSearchIndexRequestBuilderFactory.hasContext); }
Example 9
Source File: TestHBaseSink.java From mt-flume with Apache License 2.0 | 5 votes |
@Test(expected = FlumeException.class) public void testMissingTable() throws Exception { ctx.put("batchSize", "2"); HBaseSink sink = new HBaseSink(testUtility.getConfiguration()); Configurables.configure(sink, ctx); //Reset the context to a higher batchSize ctx.put("batchSize", "100"); Channel channel = new MemoryChannel(); Configurables.configure(channel, new Context()); sink.setChannel(channel); sink.start(); Transaction tx = channel.getTransaction(); tx.begin(); for(int i = 0; i < 3; i++){ Event e = EventBuilder.withBody(Bytes.toBytes(valBase + "-" + i)); channel.put(e); } tx.commit(); tx.close(); sink.process(); HTable table = new HTable(testUtility.getConfiguration(), tableName); byte[][] results = getResults(table, 2); byte[] out; int found = 0; for(int i = 0; i < 2; i++){ for(int j = 0; j < 2; j++){ if(Arrays.equals(results[j],Bytes.toBytes(valBase + "-" + i))){ found++; break; } } } Assert.assertEquals(2, found); out = results[2]; Assert.assertArrayEquals(Longs.toByteArray(2), out); sink.process(); sink.stop(); }
Example 10
Source File: TestLoadBalancingSinkProcessor.java From mt-flume with Apache License 2.0 | 5 votes |
@Test public void testDefaultConfiguration() throws Exception { // If no selector is specified, the round-robin selector should be used Channel ch = new MockChannel(); int n = 100; int numEvents = 3*n; for (int i = 0; i < numEvents; i++) { ch.put(new MockEvent("test" + i)); } MockSink s1 = new MockSink(1); s1.setChannel(ch); MockSink s2 = new MockSink(2); s2.setChannel(ch); MockSink s3 = new MockSink(3); s3.setChannel(ch); List<Sink> sinks = new ArrayList<Sink>(); sinks.add(s1); sinks.add(s2); sinks.add(s3); LoadBalancingSinkProcessor lbsp = getProcessor(sinks, new Context()); Status s = Status.READY; while (s != Status.BACKOFF) { s = lbsp.process(); } Assert.assertTrue(s1.getEvents().size() == n); Assert.assertTrue(s2.getEvents().size() == n); Assert.assertTrue(s3.getEvents().size() == n); }
Example 11
Source File: TestHBaseSink.java From mt-flume with Apache License 2.0 | 5 votes |
@Test public void testThreeEvents() throws Exception { testUtility.createTable(tableName.getBytes(), columnFamily.getBytes()); HBaseSink sink = new HBaseSink(testUtility.getConfiguration()); Configurables.configure(sink, ctx); Channel channel = new MemoryChannel(); Configurables.configure(channel, new Context()); sink.setChannel(channel); sink.start(); Transaction tx = channel.getTransaction(); tx.begin(); for(int i = 0; i < 3; i++){ Event e = EventBuilder.withBody(Bytes.toBytes(valBase + "-" + i)); channel.put(e); } tx.commit(); tx.close(); sink.process(); sink.stop(); HTable table = new HTable(testUtility.getConfiguration(), tableName); byte[][] results = getResults(table, 3); byte[] out; int found = 0; for(int i = 0; i < 3; i++){ for(int j = 0; j < 3; j++){ if(Arrays.equals(results[j],Bytes.toBytes(valBase + "-" + i))){ found++; break; } } } Assert.assertEquals(3, found); out = results[3]; Assert.assertArrayEquals(Longs.toByteArray(3), out); testUtility.deleteTable(tableName.getBytes()); }
Example 12
Source File: TestUtils.java From mt-flume with Apache License 2.0 | 5 votes |
public static Set<String> putWithoutCommit(Channel channel, Transaction tx, String prefix, int number) { Set<String> events = Sets.newHashSet(); tx.begin(); for (int i = 0; i < number; i++) { String eventData = (prefix + UUID.randomUUID()).toString(); Event event = EventBuilder.withBody(eventData.getBytes()); channel.put(event); events.add(eventData); } return events; }
Example 13
Source File: TestUtils.java From mt-flume with Apache License 2.0 | 5 votes |
public static Set<String> putEvents(Channel channel, String prefix, int batchSize, int numEvents, boolean untilCapacityIsReached) throws Exception { Set<String> result = Sets.newHashSet(); for (int i = 0; i < numEvents; i += batchSize) { Transaction transaction = channel.getTransaction(); transaction.begin(); try { Set<String> batch = Sets.newHashSet(); for (int j = 0; j < batchSize; j++) { String s = prefix + "-" + i + "-" + j + "-" + UUID.randomUUID(); Event event = EventBuilder.withBody(s.getBytes(Charsets.UTF_8)); channel.put(event); batch.add(s); } transaction.commit(); result.addAll(batch); } catch (Exception ex) { transaction.rollback(); if(untilCapacityIsReached && ex instanceof ChannelException && ("The channel has reached it's capacity. " + "This might be the result of a sink on the channel having too " + "low of batch size, a downstream system running slower than " + "normal, or that the channel capacity is just too low. " + "[channel=" +channel.getName() + "]"). equals(ex.getMessage())) { break; } throw ex; } finally { transaction.close(); } } return result; }
Example 14
Source File: TestHBaseSink.java From mt-flume with Apache License 2.0 | 5 votes |
@Test public void testOneEvent() throws Exception { testUtility.createTable(tableName.getBytes(), columnFamily.getBytes()); HBaseSink sink = new HBaseSink(testUtility.getConfiguration()); Configurables.configure(sink, ctx); Channel channel = new MemoryChannel(); Configurables.configure(channel, new Context()); sink.setChannel(channel); sink.start(); Transaction tx = channel.getTransaction(); tx.begin(); Event e = EventBuilder.withBody( Bytes.toBytes(valBase)); channel.put(e); tx.commit(); tx.close(); sink.process(); sink.stop(); HTable table = new HTable(testUtility.getConfiguration(), tableName); byte[][] results = getResults(table, 1); byte[] out = results[0]; Assert.assertArrayEquals(e.getBody(), out); out = results[1]; Assert.assertArrayEquals(Longs.toByteArray(1), out); testUtility.deleteTable(tableName.getBytes()); }
Example 15
Source File: TestAsyncHBaseSink.java From mt-flume with Apache License 2.0 | 5 votes |
@Test public void testOneEventWithDefaults() throws Exception { Map<String,String> ctxMap = new HashMap<String,String>(); ctxMap.put("table", tableName); ctxMap.put("columnFamily", columnFamily); ctxMap.put("serializer", "org.apache.flume.sink.hbase.SimpleAsyncHbaseEventSerializer"); ctxMap.put("keep-alive", "0"); ctxMap.put("timeout", "10000"); Context tmpctx = new Context(); tmpctx.putAll(ctxMap); testUtility.createTable(tableName.getBytes(), columnFamily.getBytes()); deleteTable = true; AsyncHBaseSink sink = new AsyncHBaseSink(testUtility.getConfiguration()); Configurables.configure(sink, tmpctx); Channel channel = new MemoryChannel(); Configurables.configure(channel, tmpctx); sink.setChannel(channel); sink.start(); Transaction tx = channel.getTransaction(); tx.begin(); Event e = EventBuilder.withBody( Bytes.toBytes(valBase)); channel.put(e); tx.commit(); tx.close(); Assert.assertFalse(sink.isConfNull()); sink.process(); sink.stop(); HTable table = new HTable(testUtility.getConfiguration(), tableName); byte[][] results = getResults(table, 1); byte[] out = results[0]; Assert.assertArrayEquals(e.getBody(), out); out = results[1]; Assert.assertArrayEquals(Longs.toByteArray(1), out); }
Example 16
Source File: TestAsyncHBaseSink.java From mt-flume with Apache License 2.0 | 4 votes |
@Test public void testWithoutConfigurationObject() throws Exception{ testUtility.createTable(tableName.getBytes(), columnFamily.getBytes()); deleteTable = true; ctx.put("batchSize", "2"); ctx.put(HBaseSinkConfigurationConstants.ZK_QUORUM, testUtility.getConfiguration().get(HConstants.ZOOKEEPER_QUORUM)); ctx.put(HBaseSinkConfigurationConstants.ZK_ZNODE_PARENT, testUtility.getConfiguration().get(HConstants.ZOOKEEPER_ZNODE_PARENT)); AsyncHBaseSink sink = new AsyncHBaseSink(); Configurables.configure(sink, ctx); // Reset context to values usable by other tests. ctx.put(HBaseSinkConfigurationConstants.ZK_QUORUM, null); ctx.put(HBaseSinkConfigurationConstants.ZK_ZNODE_PARENT,null); ctx.put("batchSize", "100"); Channel channel = new MemoryChannel(); Configurables.configure(channel, ctx); sink.setChannel(channel); sink.start(); Transaction tx = channel.getTransaction(); tx.begin(); for(int i = 0; i < 3; i++){ Event e = EventBuilder.withBody(Bytes.toBytes(valBase + "-" + i)); channel.put(e); } tx.commit(); tx.close(); int count = 0; Status status = Status.READY; while(status != Status.BACKOFF){ count++; status = sink.process(); } /* * Make sure that the configuration was picked up from the context itself * and not from a configuration object which was created by the sink. */ Assert.assertTrue(sink.isConfNull()); sink.stop(); Assert.assertEquals(2, count); HTable table = new HTable(testUtility.getConfiguration(), tableName); byte[][] results = getResults(table, 3); byte[] out; int found = 0; for(int i = 0; i < 3; i++){ for(int j = 0; j < 3; j++){ if(Arrays.equals(results[j],Bytes.toBytes(valBase + "-" + i))){ found++; break; } } } Assert.assertEquals(3, found); out = results[3]; Assert.assertArrayEquals(Longs.toByteArray(3), out); }
Example 17
Source File: TestHDFSEventSink.java From mt-flume with Apache License 2.0 | 4 votes |
@Test public void testSimpleAppendLocalTime() throws InterruptedException, LifecycleException, EventDeliveryException, IOException { final long currentTime = System.currentTimeMillis(); Clock clk = new Clock() { @Override public long currentTimeMillis() { return currentTime; } }; LOG.debug("Starting..."); final String fileName = "FlumeData"; final long rollCount = 5; final long batchSize = 2; final int numBatches = 4; String newPath = testPath + "/singleBucket/%s" ; String expectedPath = testPath + "/singleBucket/" + String.valueOf(currentTime/1000); int totalEvents = 0; int i = 1, j = 1; // clear the test directory Configuration conf = new Configuration(); FileSystem fs = FileSystem.get(conf); Path dirPath = new Path(expectedPath); fs.delete(dirPath, true); fs.mkdirs(dirPath); Context context = new Context(); context.put("hdfs.path", newPath); context.put("hdfs.filePrefix", fileName); context.put("hdfs.rollCount", String.valueOf(rollCount)); context.put("hdfs.batchSize", String.valueOf(batchSize)); context.put("hdfs.useLocalTimeStamp", String.valueOf(true)); Configurables.configure(sink, context); Channel channel = new MemoryChannel(); Configurables.configure(channel, context); sink.setChannel(channel); sink.setBucketClock(clk); sink.start(); Calendar eventDate = Calendar.getInstance(); List<String> bodies = Lists.newArrayList(); // push the event batches into channel for (i = 1; i < numBatches; i++) { Transaction txn = channel.getTransaction(); txn.begin(); for (j = 1; j <= batchSize; j++) { Event event = new SimpleEvent(); eventDate.clear(); eventDate.set(2011, i, i, i, 0); // yy mm dd event.getHeaders().put("timestamp", String.valueOf(eventDate.getTimeInMillis())); event.getHeaders().put("hostname", "Host" + i); String body = "Test." + i + "." + j; event.setBody(body.getBytes()); bodies.add(body); channel.put(event); totalEvents++; } txn.commit(); txn.close(); // execute sink to process the events sink.process(); } sink.stop(); // loop through all the files generated and check their contains FileStatus[] dirStat = fs.listStatus(dirPath); Path fList[] = FileUtil.stat2Paths(dirStat); // check that the roll happened correctly for the given data long expectedFiles = totalEvents / rollCount; if (totalEvents % rollCount > 0) expectedFiles++; Assert.assertEquals("num files wrong, found: " + Lists.newArrayList(fList), expectedFiles, fList.length); verifyOutputSequenceFiles(fs, conf, dirPath.toUri().getPath(), fileName, bodies); // The clock in bucketpath is static, so restore the real clock sink.setBucketClock(new SystemClock()); }
Example 18
Source File: TestLoadBalancingSinkProcessor.java From mt-flume with Apache License 2.0 | 4 votes |
@Test public void testRoundRobinBackoffInitialFailure() throws EventDeliveryException { Channel ch = new MockChannel(); int n = 100; int numEvents = 3*n; for (int i = 0; i < numEvents; i++) { ch.put(new MockEvent("test" + i)); } MockSink s1 = new MockSink(1); s1.setChannel(ch); MockSink s2 = new MockSink(2); s2.setChannel(ch); MockSink s3 = new MockSink(3); s3.setChannel(ch); List<Sink> sinks = new ArrayList<Sink>(); sinks.add(s1); sinks.add(s2); sinks.add(s3); LoadBalancingSinkProcessor lbsp = getProcessor("round_robin",sinks, true); Status s = Status.READY; for (int i = 0; i < 3 && s != Status.BACKOFF; i++) { s = lbsp.process(); } s2.setFail(true); for (int i = 0; i < 3 && s != Status.BACKOFF; i++) { s = lbsp.process(); } s2.setFail(false); while (s != Status.BACKOFF) { s = lbsp.process(); } Assert.assertEquals((3 * n) / 2, s1.getEvents().size()); Assert.assertEquals(1, s2.getEvents().size()); Assert.assertEquals((3 * n) /2 - 1, s3.getEvents().size()); }
Example 19
Source File: TestHBaseSink.java From mt-flume with Apache License 2.0 | 4 votes |
@Test public void testMultipleBatches() throws Exception { testUtility.createTable(tableName.getBytes(), columnFamily.getBytes()); ctx.put("batchSize", "2"); HBaseSink sink = new HBaseSink(testUtility.getConfiguration()); Configurables.configure(sink, ctx); //Reset the context to a higher batchSize ctx.put("batchSize", "100"); Channel channel = new MemoryChannel(); Configurables.configure(channel, new Context()); sink.setChannel(channel); sink.start(); Transaction tx = channel.getTransaction(); tx.begin(); for(int i = 0; i < 3; i++){ Event e = EventBuilder.withBody(Bytes.toBytes(valBase + "-" + i)); channel.put(e); } tx.commit(); tx.close(); int count = 0; Status status = Status.READY; while(status != Status.BACKOFF){ count++; status = sink.process(); } sink.stop(); Assert.assertEquals(2, count); HTable table = new HTable(testUtility.getConfiguration(), tableName); byte[][] results = getResults(table, 3); byte[] out; int found = 0; for(int i = 0; i < 3; i++){ for(int j = 0; j < 3; j++){ if(Arrays.equals(results[j],Bytes.toBytes(valBase + "-" + i))){ found++; break; } } } Assert.assertEquals(3, found); out = results[3]; Assert.assertArrayEquals(Longs.toByteArray(3), out); testUtility.deleteTable(tableName.getBytes()); }
Example 20
Source File: JDBCSinkTest.java From ingestion with Apache License 2.0 | 4 votes |
/** * Sample code to validate postgresql integration with JDBC sink * Ignored until we get a Docker Postgresql and move to integration test * @throws Exception */ @Test @Ignore public void templateWithPostgres() throws Exception { Class.forName("org.postgresql.Driver").newInstance(); Connection connTruncate = DriverManager.getConnection("jdbc:postgresql://10.200.0.126:5432/test_erige?user=postgres&password="); connTruncate.prepareStatement("TRUNCATE tc40;").execute(); //conn.prepareStatement("CREATE TABLE tc40 (myInteger INTEGER, myString VARCHAR, myId BIGINT AUTO_INCREMENT " // + "PRIMARY KEY);").execute(); //connTruncate.commit(); connTruncate.close(); Context ctx = new Context(); ctx.put("driver", "org.postgresql.Driver"); ctx.put("connectionString", "jdbc:postgresql://10.200.0.126:5432/test_erige?user=postgres&password="); ctx.put("sqlDialect", "POSTGRES"); ctx.put("table", "tc40"); ctx.put("username", "postgres"); ctx.put("batchSize", "1"); ctx.put("sql", "INSERT INTO \"tc40\" (\"arn\", \"account_number\") VALUES " + "(${header.arn:varchar}, ${header.account_number:varchar})"); JDBCSink jdbcSink = new JDBCSink(); Configurables.configure(jdbcSink, ctx); Context channelContext = new Context(); channelContext.put("capacity", "10000"); channelContext.put("transactionCapacity", "200"); Channel channel = new MemoryChannel(); channel.setName("junitChannel"); Configurables.configure(channel, channelContext); jdbcSink.setChannel(channel); channel.start(); jdbcSink.start(); Transaction tx = channel.getTransaction(); tx.begin(); Map<String, String> headers = new HashMap<String, String>(); headers.put("arn", "bar"); // Overwrites the value defined in JSON body headers.put("account_number", "account number"); headers.put("dsadas", "dsadasdas"); Event event = EventBuilder.withBody(new byte[0], headers); channel.put(event); tx.commit(); tx.close(); jdbcSink.process(); jdbcSink.stop(); channel.stop(); //Connection conn = DriverManager.getConnection("jdbc:h2:/tmp/jdbcsink_test"); Connection conn = DriverManager.getConnection("jdbc:postgresql://10.200.0" + ".126:5432/test_erige?user=postgres&password="); ResultSet rs = conn.prepareStatement("SELECT count(*) AS count FROM tc40").executeQuery(); rs.next(); assertThat(rs.getInt("count")).isEqualTo(1); rs = conn.prepareStatement("SELECT * FROM tc40").executeQuery(); rs.next(); // for (int i = 1; i <= 3; i++) { // System.out.println(rs.getString(i)); // } assertThat(rs.getString("arn")).isEqualTo("bar"); conn.close(); }