/**
* Copyright 2015 StreamSets Inc.
*
* Licensed under 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 com.streamsets.pipeline.lib;
import com.google.common.collect.ImmutableMap;
import com.streamsets.pipeline.api.Field;
import com.streamsets.pipeline.api.Record;
import com.streamsets.pipeline.config.DataFormat;
import com.streamsets.pipeline.sdk.RecordCreator;
import com.streamsets.pipeline.stage.destination.flume.ClientType;
import com.streamsets.pipeline.stage.destination.flume.FlumeConfig;
import com.streamsets.pipeline.stage.destination.flume.FlumeConfigBean;
import com.streamsets.pipeline.stage.destination.flume.FlumeTarget;
import com.streamsets.pipeline.stage.destination.flume.HostSelectionStrategy;
import com.streamsets.pipeline.stage.destination.lib.DataGeneratorFormatConfig;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
public class FlumeTestUtil {
private FlumeTestUtil() {}
private static final String MIME = "text/plain";
private static final String TEST_STRING = "Hello World";
public static final String TEST_STRING_255 = "StreamSets was founded in June 2014 by business and engineering " +
"leaders in the data integration space with a history of bringing successful products to market. We’re a " +
"team that is laser-focused on solving hard problems so our customers don’t have to.";
public static List<Record> produce20Records() throws IOException {
List<Record> list = new ArrayList<>();
for (int i = 0; i < 20; i++) {
Record record = RecordCreator.create();
Map<String, Field> map = new HashMap<>();
map.put("name", Field.create("NAME" + i));
map.put("lastStatusChange", Field.create(i));
record.set(Field.create(map));
list.add(record);
}
return list;
}
public static List<Record> createJsonRecords() throws IOException {
return produce20Records();
}
public static List<Record> createStringRecords() {
List<Record> records = new ArrayList<>(9);
for (int i = 0; i < 9; i++) {
Record r = RecordCreator.create("s", "s:1", (TEST_STRING + i).getBytes(), MIME);
r.set(Field.create((TEST_STRING + i)));
records.add(r);
}
return records;
}
public static List<Record> createCsvRecords() throws IOException {
List<Record> records = new ArrayList<>();
String line;
BufferedReader bufferedReader = new BufferedReader(new FileReader(FlumeTestUtil.class.getClassLoader()
.getResource("testFlumeTarget.csv").getFile()));
while ((line = bufferedReader.readLine()) != null) {
String columns[] = line.split(",");
List<Field> list = new ArrayList<>();
for (String column : columns) {
Map<String, Field> map = new LinkedHashMap<>();
map.put("value", Field.create(column));
list.add(Field.create(map));
}
Record record = RecordCreator.create("s", "s:1", null, null);
record.set(Field.create(list));
records.add(record);
}
return records;
}
public static List<Record> createBinaryRecords() {
List<Record> records = new ArrayList<>(9);
for (int i = 0; i < 9; i++) {
Record record = RecordCreator.create();
Map<String, Field> map = new HashMap<>();
map.put("data", Field.create((TEST_STRING_255 + i).getBytes()));
record.set(Field.create(map));
records.add(record);
}
return records;
}
public static FlumeTarget createFlumeTarget(
FlumeConfig flumeConfig,
DataFormat dataFormat,
DataGeneratorFormatConfig dataGeneratorFormatConfig
) {
FlumeConfigBean flumeConfigBean = new FlumeConfigBean();
flumeConfigBean.flumeConfig = flumeConfig;
flumeConfigBean.dataFormat = dataFormat;
flumeConfigBean.dataGeneratorFormatConfig = dataGeneratorFormatConfig;
return new FlumeTarget(flumeConfigBean);
}
public static FlumeConfig createFlumeConfig(
boolean backoff,
int batchSize,
ClientType clientType,
int connectionTimeout,
Map<String, String> flumeHostsConfig,
HostSelectionStrategy hostSelectionStrategy,
int maxBackOff,
int maxRetryAttempts,
int requestTimeout,
boolean singleEventPerBatch,
int waitBetweenRetries
) {
FlumeConfig flumeConfig = new FlumeConfig();
flumeConfig.backOff = backoff;
flumeConfig.batchSize = batchSize;
flumeConfig.clientType = clientType;
flumeConfig.connectionTimeout = connectionTimeout;
flumeConfig.flumeHostsConfig = flumeHostsConfig;
flumeConfig.hostSelectionStrategy = hostSelectionStrategy;
flumeConfig.maxBackOff = maxBackOff;
flumeConfig.maxRetryAttempts = maxRetryAttempts;
flumeConfig.requestTimeout = requestTimeout;
flumeConfig.singleEventPerBatch = singleEventPerBatch;
flumeConfig.waitBetweenRetries = waitBetweenRetries;
return flumeConfig;
}
public static FlumeConfig createDefaultFlumeConfig(int port, boolean singleEvent) {
return createFlumeConfig(
false, // backOff
1, // batchSize
ClientType.AVRO_FAILOVER,
1000, // connection timeout
ImmutableMap.of("h1", "localhost:" + port),
HostSelectionStrategy.RANDOM,
0, // maxBackOff
3, // maxRetryAttempts
1000, // requestTimeout
singleEvent, // singleEventPerBatch
0
);
}
}