/**
* Licensed to Cloudera, Inc. under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. Cloudera, Inc. 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 com.cloudera.flume.handlers.debug;
import java.io.IOException;
import java.io.OutputStreamWriter;
import org.junit.Assert;
import org.junit.Test;
import com.cloudera.flume.ExampleData;
import com.cloudera.flume.conf.Context;
import com.cloudera.flume.conf.FlumeBuilder;
import com.cloudera.flume.conf.FlumeSpecException;
import com.cloudera.flume.conf.ReportTestingContext;
import com.cloudera.flume.core.EventImpl;
import com.cloudera.flume.core.EventSink;
import com.cloudera.flume.core.EventSource;
import com.cloudera.flume.core.connector.DirectDriver;
import com.cloudera.flume.reporter.ReportManager;
import com.cloudera.flume.reporter.aggregator.CounterSink;
/**
* This just uses the benchmark decorators and requires users to manualy inspect
* them to see if values are reasonable.
*/
public class TestBenchmarkDeco implements ExampleData {
@Test
public void testSimpleMem() throws IOException, InterruptedException {
EventSource src = new NoNlASCIISynthSource(25, 100, 1);
EventSink snk = new ConsoleEventSink();
EventSink snk2 = new BenchmarkReportDecorator<EventSink>("report", snk);
EventSink snk3 = new BenchmarkInjectDecorator<EventSink>(snk2);
EventSink snk4 = new InMemoryDecorator<EventSink>(snk3);
DirectDriver connect = new DirectDriver(src, snk4);
src.open();
snk4.open();
connect.start();
connect.join(Long.MAX_VALUE);
src.close();
snk4.close();
snk2.getReport().toText(new OutputStreamWriter(System.err));
}
@Test
public void testSimple() throws IOException, InterruptedException {
EventSource src = new NoNlASCIISynthSource(25, 100, 1);
EventSink snk = new ConsoleEventSink();
EventSink snk2 = new BenchmarkReportDecorator<EventSink>("report", snk);
EventSink snk3 = new BenchmarkInjectDecorator<EventSink>(snk2);
DirectDriver connect = new DirectDriver(src, snk3);
src.open();
snk3.open();
connect.start();
connect.join(Long.MAX_VALUE);
src.close();
snk3.close();
snk2.getReport().toText(new OutputStreamWriter(System.err));
}
@Test
public void testSimpleBuilder() throws FlumeSpecException {
String spec = "{benchinject => null}";
FlumeBuilder.buildSink(new Context(), spec);
}
@Test
public void testSimpleBuilder2() throws FlumeSpecException {
String spec = "{benchreport(\"report\") => null}";
FlumeBuilder.buildSink(new Context(), spec);
}
@Test
public void testBuildReportSink2() throws FlumeSpecException {
String spec = "{benchreport(\"report\", \"text(\\\"test\\\")\") => null } ";
FlumeBuilder.buildSink(new Context(), spec);
}
@Test
public void testBuildInjectDeco() throws FlumeSpecException {
String spec = "{benchinject(\"report\") => null}";
FlumeBuilder.buildSink(new Context(), spec);
}
/**
* Tests to make sure the report sink receives data.
*/
@Test
public void testReportSink() throws FlumeSpecException, IOException {
String spec = "{benchinject(\"foo\") => {benchreport(\"report\", \"[ console , counter(\\\"test\\\") ]\") => null } }";
EventSink snk = FlumeBuilder.buildSink(new ReportTestingContext(), spec);
snk.open();
snk.append(new EventImpl(new byte[0]));
snk.append(new EventImpl(new byte[0]));
snk.close();
CounterSink ctr = (CounterSink) ReportManager.get().getReportable("test");
Assert.assertEquals(1, ctr.getCount());
}
}