/*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
* Copyright (c) 2013, MPL CodeInside http://codeinside.ru
*/
package ru.codeinside.gws.api.impl;
import org.junit.Test;
import ru.codeinside.gws.api.ClientRequest;
import ru.codeinside.gws.api.ClientResponse;
import ru.codeinside.gws.api.InfoSystem;
import ru.codeinside.gws.api.Packet;
import ru.codeinside.gws.api.ServerLog;
import ru.codeinside.gws.api.ServerRequest;
import ru.codeinside.gws.api.ServerResponse;
import ru.codeinside.gws.core.ExceptionProducer;
import java.io.File;
import java.io.IOException;
import java.util.HashSet;
import java.util.Set;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
public class FileTest {
final InfoSystem sender = new InfoSystem("sender", "some name");
final InfoSystem recipient = new InfoSystem("recipient", "other side");
final File logs = new File(new File("target"), "logs");
final LogServiceFileImpl logServiceFile;
{
LogSettings.setLogRoot(logs);
logServiceFile = new LogServiceFileImpl();
}
@Test
public void testNull() {
assertNull(logServiceFile.createClientLog(
3L, "client", "3", false, false, null, null
));
}
@Test
public void testExceptionText() throws IOException {
FileClientLog log = createClient(1L, "client", "1", true, false, null);
log.log(ExceptionProducer.fire("foo"));
assertEquals("java.lang.RuntimeException: foo\n" +
"\tat ru.codeinside.gws.core.ExceptionProducer.fire(ExceptionProducer.java:12)\n", log.metadata.error);
}
@Test
public void testExceptionSave() throws IOException {
FileClientLog log = createClient(2L, "client", "2", false, true, null);
log.log(ExceptionProducer.fire("foo2"));
File logDir = createLogDir(log);
assertFalse(logDir.exists());
log.close();
assertTrue(logDir.exists());
}
@Test
public void testStatusFilter() throws IOException {
FileClientLog log = createClient(3L, "client", "3", true, false, "RESULT");
log.log(ExceptionProducer.fire("foo3"));
log.close();
assertFalse(createLogDir(log).exists());
}
@Test
public void testServer() throws IOException {
logServiceFile.setServerLogEnabled(true);
logServiceFile.setServerLogEnabled("server", true);
ServerLog serverLog = logServiceFile.createServerLog("server", "127.0.0.1");
Packet sendPacket = new Packet();
sendPacket.originator = sender;
sendPacket.recipient = recipient;
sendPacket.sender = sender;
ServerRequest serverRequest = new ServerRequest();
serverRequest.packet = sendPacket;
serverLog.logRequest(serverRequest);
Packet responsePacket = new Packet();
responsePacket.originator = sender;
responsePacket.recipient = sender;
responsePacket.sender = recipient;
ServerResponse serverResponse = new ServerResponse();
serverResponse.packet = responsePacket;
serverLog.logResponse(serverResponse);
serverLog.close();
}
File createLogDir(FileLog log) {
String logDir = log.getDirName();
int len = logDir.length();
return new File(logs, "smev/" + logDir.charAt(len - 2) + "/" + logDir.charAt(len - 1) + "/" + logDir);
}
FileClientLog createClient(
long bidId, String component, String pid, boolean logEnabled, boolean logErrors, String status
)
throws IOException {
Set<String> remotes = new HashSet<String>();
FileClientLog clientLog = (FileClientLog) logServiceFile.createClientLog(
bidId, component, pid, logEnabled, logErrors, status, remotes
);
Packet sendPacket = new Packet();
sendPacket.originator = sender;
sendPacket.recipient = recipient;
sendPacket.sender = sender;
ClientRequest request = new ClientRequest();
request.packet = sendPacket;
clientLog.logRequest(request);
Packet responsePacket = new Packet();
responsePacket.originator = sender;
responsePacket.recipient = sender;
responsePacket.sender = recipient;
ClientResponse response = new ClientResponse();
response.packet = responsePacket;
clientLog.logResponse(response);
clientLog.getHttpInStream().write("in\n".getBytes());
clientLog.getHttpOutStream().write("out\n".getBytes());
return clientLog;
}
}