/*
* Copyright 2008-2014 by Emeric Vernat
*
* This file is part of Java Melody.
*
* 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 net.bull.javamelody;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Date;
import java.util.Locale;
import java.util.Timer;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
/**
* Test unitaire de la classe JRobin.
* @author Emeric Vernat
*/
public class TestJRobin {
private static final String TEST_APPLICATION = "test";
/** Before.
* @throws IOException e */
@Before
public void setUp() throws IOException {
Utils.initialize();
JRobin.initBackendFactory(new Timer(getClass().getSimpleName(), true));
}
/** After. */
@After
public void tearDown() {
JRobin.stop();
}
/** Test.
* @throws IOException e */
@Test
public void test() throws IOException {
final Range range = Period.JOUR.getRange();
final Range customRange = Range.createCustomRange(new Date(System.currentTimeMillis() - 24L
* 60 * 60 * 1000), new Date());
final JRobin jrobin = JRobin.createInstance(TEST_APPLICATION, "id",
"requête très très très très très très longue");
jrobin.graph(range, 500, 200);
jrobin.graph(range, 80, 80);
jrobin.graph(customRange, 500, 200);
jrobin.graph(customRange, 80, 80);
jrobin.getLastValue();
jrobin.deleteFile();
}
/** Test.
* @throws IOException e */
@Test
public void testChinese() throws IOException {
final Range range = Period.JOUR.getRange();
final Locale locale = Locale.getDefault();
try {
Locale.setDefault(Locale.CHINESE);
final JRobin jrobin = JRobin.createInstance(TEST_APPLICATION, "cpu", null);
jrobin.graph(range, 80, 80);
jrobin.deleteFile();
} finally {
Locale.setDefault(locale);
}
}
/** Test.
* @throws IOException e */
@Test
public void testInitAndResetFile() throws IOException {
final String application = TEST_APPLICATION;
final String jrobinName = "name";
final File dir = Parameters.getStorageDirectory(application);
// ce fichier sera celui utilisé par JRobin
final File rrdFile = new File(dir, jrobinName + ".rrd");
// JRobin.createInstance devrait initialiser les fichiers non existants
assertTrue("delete", !rrdFile.exists() || rrdFile.delete());
JRobin.createInstance(application, jrobinName, "request");
// JRobin.createInstance devrait réinitialiser les fichiers de longueur 0
new FileOutputStream(rrdFile).close();
assertEquals("check file length", 0, rrdFile.length());
JRobin.createInstance(application, jrobinName, "request");
assertTrue("delete", !rrdFile.exists() || rrdFile.delete());
final FileOutputStream out = new FileOutputStream(rrdFile);
try {
// il faut un minimum de quantité de données pour avoir RrdException "Invalid file header"
for (int i = 0; i < 100; i++) {
out.write("n'est pas un fichier rrd".getBytes());
}
} finally {
out.close();
}
final JRobin jrobin = JRobin.createInstance(application, jrobinName, "request");
// addValue devrait appeler resetFile car RrdException "Invalid file header"
// puis devrait relancer une IOException
try {
jrobin.addValue(1);
} catch (final IOException e) {
assertTrue("cause", e.getCause() != null && e.getCause().getMessage() != null
&& e.getCause().getMessage().contains("Invalid file header"));
}
// après ce resetFile, on devrait pouvoir appeler addValue
jrobin.addValue(1);
}
/** Test.
* @throws IOException e */
@Test
public void testDeleteObsoleteJRobinFiles() throws IOException {
JRobin.deleteObsoleteJRobinFiles(TEST_APPLICATION);
}
}