/*
* Copyright 1999-2006 University of Chicago
*
* 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 org.dcache.ftp.client.test;
import org.dcache.ftp.client.PerfMarker;
import org.dcache.ftp.client.exception.PerfMarkerException;
import junit.framework.TestCase;
import junit.framework.Test;
import junit.framework.TestSuite;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
Test PerfMarker
**/
public class PerfMarkerTest extends TestCase {
private static Logger logger =
LoggerFactory.getLogger(PerfMarkerTest.class);
private static String nl = System.getProperty("line.separator");
private static String space = " ";
public static void main(String[] argv) {
junit.textui.TestRunner.run (suite());
}
public static Test suite() {
return new TestSuite(PerfMarkerTest.class);
}
public PerfMarkerTest(String name) {
super(name);
}
/**
Test interesting cases of perf marker construction with
invalid argument, and ensure that IllegalAgumentException
is thrown.
**/
public void testConstructorError() {
//make sure only IllegalArgumentE gets thrown
/* correct:
String msg =
"Perf Marker" + nl
+ " Timestamp: 111222333444.5" + nl
+ " Stripe Index: 5" + nl
+ " Stripe Bytes Transferred: 987654321987654321" + nl
+ " Total Stripe Count: 30" + nl
+ "112 End" + nl;
*/
// no first line
String msg =
" Timestamp: 111222333444.5" + nl
+ " Stripe Index: 5" + nl
+ " Stripe Bytes Transferred: 987654321987654321" + nl
+ " Total Stripe Count: 30" + nl
+ "112 End" + nl;
assertConstructorError(msg);
// whole reply instead of just message
msg = "112-Perf Marker" + nl
+ " Timestamp: 111222333444.5" + nl
+ " Stripe Index: 5" + nl
+ " Stripe Bytes Transferred: 987654321987654321" + nl
+ " Total Stripe Count: 30" + nl
+ "112 End" + nl;
assertConstructorError(msg);
// no timestamp
msg = "Perf Marker" + nl
+ " Stripe Index: 5" + nl
+ " Stripe Bytes Transferred: 987654321987654321" + nl
+ " Total Stripe Count: 30" + nl
+ "112 End" + nl;
assertConstructorError(msg);
// 211 message instead of 112
msg =
"Extensions supported:" + nl +
" REST STREAM" + nl +
" ESTO" + nl +
" ERET" + nl +
" MDTM" + nl +
" SIZE" + nl +
" PARALLEL" + nl +
" DCAU" + nl +
"211 END";
assertConstructorError(msg);
}
/**
test interesting cases of perf marker construction and examine its
get() and has() methods.
**/
public void testObject()
throws Exception{
// simple
String msg = "Perf Marker" + nl
+ " Timestamp: 111222333444.5" + nl
+ " Stripe Index: 5" + nl
+ " Stripe Bytes Transferred: 987654321987654321" + nl
+ " Total Stripe Count: 30" + nl
+ "112 End" + nl;
testObject(msg,
111222333444.5,
true, 5,
true, new Long("987654321987654321").longValue(),
true, 30);
// unordered
msg = "Perf Marker" + nl
+ " Total Stripe Count: 30" + nl
+ " Stripe Index: 5" + nl
+ " Stripe Bytes Transferred: 987654321987654321" + nl
+ " Timestamp: 111222333444.5" + nl
+ "112 End" + nl;
testObject(msg,
111222333444.5,
true, 5,
true, new Long("987654321987654321").longValue(),
true, 30);
// missing stripe info
msg = "Perf Marker" + nl
+ " Timestamp: 111222333444.5" + nl
+ " Total Stripe Count: 30" + nl
+ "112 End" + nl;
testObject(msg,
111222333444.5,
false, 0,
false, 0,
true, 30);
// missing count
msg = "Perf Marker" + nl
+ " Timestamp: 111222333444.5" + nl
+ " Stripe Index: 5" + nl
+ " Stripe Bytes Transferred: 987654321987654321" + nl
+ "112 End" + nl;
testObject(msg,
111222333444.5,
true, 5,
true, new Long("987654321987654321").longValue(),
false, 0);
// missing most info
msg = "Perf Marker" + nl
+ " Timestamp: 111222333444.5" + nl
+ "112 End" + nl;
testObject(msg,
111222333444.5,
false, 0,
false, 0,
false, 0);
// zero values
msg = "Perf Marker" + nl
+ " Timestamp: 0" + nl
+ " Stripe Index: 0" + nl
+ " Stripe Bytes Transferred: 0" + nl
+ " Total Stripe Count: 0" + nl
+ "112 End" + nl;
testObject(msg,
0,
true, 0,
true, 0,
true, 0);
}//testObject
/**
test perf marker construction and get() and has() methods.
"in" is constructor parameter, other params describe the
expected object examination behavior.
**/
private void testObject(String in,
double ts,
boolean hasSI, long si,
boolean hasBT, long bt,
boolean hasTSC, long tsc)
throws Exception{
logger.info("checking object:\n" + in);
PerfMarker m =
new PerfMarker(in);
// time stamp
assertTrue(m.getTimeStamp() == ts);
// stripe index
assertTrue(m.hasStripeIndex() == hasSI);
if (m.hasStripeIndex()) {
assertTrue(m.getStripeIndex() == si);
logger.debug("okay, stripe index matches.");
}else {
boolean threwOk = false;
try {
m.getStripeIndex();
} catch (PerfMarkerException e) {
threwOk = true;
}
if (! threwOk ) {
fail("method did not throw an exception when it should have");
}
logger.debug("okay, throws exception as expected.");
}
// stripe bytes transferred
assertTrue(m.hasStripeBytesTransferred() == hasBT);
if (hasBT) {
assertTrue(m.getStripeBytesTransferred() == bt);
logger.debug("okay, stripe bytes transf matches.");
}else {
boolean threwOk = false;
try {
m.getStripeBytesTransferred();
} catch (PerfMarkerException e) {
threwOk = true;
}
if (! threwOk ) {
fail("method did not throw an exception when it should have");
}
logger.debug("okay, throws exception as expected.");
}
// total stripe count
assertTrue(m.hasTotalStripeCount() == hasTSC);
if (hasTSC) {
assertTrue(m.getTotalStripeCount() == tsc);
logger.debug("okay, stripe count matches.");
}else {
boolean threwOk = false;
try {
m.getTotalStripeCount();
} catch (PerfMarkerException e) {
threwOk = true;
}
if (! threwOk ) {
fail("method did not throw an exception when it should have");
}
logger.debug("okay, throws exception as expected.");
}
}
/**
Assume that arg represent an invalid message;
ensure that constructor throws IllegalArgumentException.
**/
private void assertConstructorError(String arg) {
logger.info("checking bad construction:\n" + arg);
boolean threwOk = false;
try {
new PerfMarker(arg);
} catch (IllegalArgumentException e) {
threwOk = true;
}
if (! threwOk ) {
fail("constructor did not throw an exception when it should have");
}
logger.debug("okay, throws exception as expected.");
}
}