/*
* Copyright MapR Technologies, $year
*
* Licensed 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.mapr.franz.hazel;
import com.google.common.base.Strings;
import com.google.common.collect.Lists;
import com.google.common.io.Files;
import com.google.protobuf.ServiceException;
import com.googlecode.protobuf.pro.duplex.PeerInfo;
import com.mapr.franz.catcher.Client;
import org.junit.Test;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.net.SocketException;
import java.nio.file.FileVisitResult;
import java.nio.file.FileVisitor;
import java.nio.file.Path;
import java.nio.file.attribute.BasicFileAttributes;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import static java.nio.file.Files.*;
public class HazelCatcherTest {
@Test
public void testSingleServer() throws IOException, ServiceException, InterruptedException {
String basePath = Files.createTempDir().getPath();
final HazelCatcher.Options opts = new HazelCatcher.Options()
.base(basePath)
.host("localhost")
.port(7070);
ExecutorService bg = Executors.newSingleThreadExecutor();
bg.submit(new Callable<Object>() {
@Override
public Object call() {
try {
HazelCatcher.run(opts);
return null;
} catch (SocketException | FileNotFoundException e) {
throw new RuntimeException(e);
}
}
});
Thread.sleep(7000);
Client c = new Client(Lists.newArrayList(new PeerInfo("localhost", 7070)));
c.sendMessage("foo-1", "hello there");
c.close();
Thread.sleep(7000);
bg.shutdownNow();
Thread.sleep(1000);
System.out.printf("\n\n");
walkFileTree(new File(basePath).toPath(),
new FileVisitor<Path>() {
int indent = 0;
@Override
public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException {
System.out.printf("%s%s/\n", Strings.padStart("", indent, ' '), dir.getFileName());
indent += 2;
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
if (attrs.isRegularFile()) {
System.out.printf("%s%s(%d)\n", Strings.padStart("", indent, ' '), file.getFileName(), file.toFile().length());
file.toFile().delete();
} else {
// ignore
}
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult visitFileFailed(Path file, IOException exc) throws IOException {
throw new UnsupportedOperationException("Default operation");
}
@Override
public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException {
indent -= 2;
dir.toFile().delete();
return FileVisitResult.CONTINUE;
}
});
System.out.printf("\n\n");
}
}