/*
Copyright (C) SYSTAP, LLC DBA Blazegraph 2006-2016. All rights reserved.
Contact:
SYSTAP, LLC DBA Blazegraph
2501 Calvert ST NW #106
Washington, DC 20008
licenses@blazegraph.com
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; version 2 of the License.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
/*
* Created on May 9, 2008
*/
package com.bigdata.counters.osx;
import com.bigdata.counters.*;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.util.regex.Pattern;
/**
* Test suite for parsing the output of the <code>vm_stat</code> utility under
* OSX.
*
* @author <a href="mailto:thompsonbry@users.sourceforge.net">Bryan Thompson</a>
* @version $Id$
*/
public class TestParse_vm_stat extends AbstractParserTestCase {
public TestParse_vm_stat() {
super();
}
public TestParse_vm_stat(String name) {
super(name);
}
/**
* Test based on some sample data.
*/
public void test_vmstat_header_and_data_parse() {
final Pattern pattern = VMStatCollector.pattern;
// first header line.
final String h0 = "Mach Virtual Memory Statistics: (page size of 4096 bytes, cache hits 0%)";
// second header line.
final String h1 = " free active spec inactive wire faults copy 0fill reactive pageins pageout";
// data line
final String d1 = "404670 1238K 42678 161330 183963 144830K 2032186 81929280 1353888 351293 149940";
// test header parse.
{
final String[] fields = pattern.split(h0.trim(), 0/* limit */);
for (int i = 0; i < fields.length; i++) {
if(log.isInfoEnabled())
log.info("fields[" + i + "]=[" + fields[i] + "]");
}
assertField(h0, fields, 0, "Mach"); // marker
assertField(h0, fields, 7, "4096"); // page size
}
{
final String[] fields = pattern.split(h1.trim(), 0/* limit */);
for (int i = 0; i < fields.length; i++) {
if(log.isInfoEnabled())
log.info("fields[" + i + "]=[" + fields[i] + "]");
}
assertField(h1, fields, 0, "free");
assertField(h1, fields, 1, "active");
assertField(h1, fields, 2, "spec");
assertField(h1, fields, 3, "inactive");
assertField(h1, fields, 4, "wire");
assertField(h1, fields, 5, "faults");
assertField(h1, fields, 6, "copy");
assertField(h1, fields, 7, "0fill");
assertField(h1, fields, 8, "reactive");
assertField(h1, fields, 9, "pageins");
assertField(h1, fields,10, "pageout");
}
// test data parse.
// final String h1 = " free active spec inactive wire faults copy 0fill reactive pageins pageout";
// final String d1 = "404670 1238K 42678 161330 183963 144830K 2032186 81929280 1353888 351293 149940";
{
final String[] fields = pattern.split(d1.trim(), 0/* limit */);
assertField(d1, fields, 0, "404670"); // free
assertField(d1, fields, 1, "1238K"); // active
assertField(d1, fields, 2, "42678"); // spec
assertField(d1, fields, 3, "161330"); // inactive
assertField(d1, fields, 4, "183963"); // wire
assertField(d1, fields, 5, "144830K"); // faults
assertField(d1, fields, 6, "2032186"); // copy
assertField(d1, fields, 7, "81929280");// 0fill
assertField(d1, fields, 8, "1353888"); // reactive
assertField(d1, fields, 9, "351293"); // pageins
assertField(d1, fields,10, "149940"); // pageout
}
}
/**
* <pre>
Mach Virtual Memory Statistics: (page size of 4096 bytes)
free active specul inactive throttle wired prgable faults copy 0fill reactive purged file-backed anonymous cmprssed cmprssor dcomprs comprs pageins pageout swapins swapouts
17656 1502912 110218 1329298 0 783121 32302 1122834K 22138464 897721K 4538117 2220029 382716 2559712 1093181 449012 1856773 4298532 67248050 263644 779970 886296
41993 1479331 110174 1329290 0 782241 33940 2115 1 1316 0 0 382671 2536124 1093181 449012 0 0 24 0 0 0
* </pre>
*
* @see #1125 (OSX vm_stat output has changed)
*/
public void test_parse_osx_yosemite() {
final Pattern pattern = VMStatCollector.pattern;
// first header line.
final String h0 = "Mach Virtual Memory Statistics: (page size of 4096 bytes)";
// second header line.
final String h1 = " free active specul inactive throttle wired prgable faults copy 0fill reactive purged file-backed anonymous cmprssed cmprssor dcomprs comprs pageins pageout swapins swapouts";
// data line
final String d1 = " 41993 1479331 110174 1329290 0 782241 33940 2115 1 1316 0 0 382671 2536124 1093181 449012 0 0 24 0 0 0";
// test header parse.
{
final String[] fields = pattern.split(h0.trim(), 0/* limit */);
for (int i = 0; i < fields.length; i++) {
if(log.isInfoEnabled())
log.info("fields[" + i + "]=[" + fields[i] + "]");
}
assertField(h0, fields, 0, "Mach"); // marker
assertField(h0, fields, 7, "4096"); // page size
}
{
final String[] fields = pattern.split(h1.trim(), 0/* limit */);
for (int i = 0; i < fields.length; i++) {
if(log.isInfoEnabled())
log.info("fields[" + i + "]=[" + fields[i] + "]");
}
assertField(h1, fields, 0, "free");
assertField(h1, fields, 1, "active");
assertField(h1, fields, 2, "specul");
assertField(h1, fields, 3, "inactive");
assertField(h1, fields, 4, "throttle");
assertField(h1, fields, 5, "wired");
assertField(h1, fields, 6, "prgable");
assertField(h1, fields, 7, "faults");
assertField(h1, fields, 8, "copy");
assertField(h1, fields, 9, "0fill");
assertField(h1, fields,10, "reactive");
assertField(h1, fields,11, "purged");
assertField(h1, fields,12, "file-backed");
assertField(h1, fields,13, "anonymous");
assertField(h1, fields,14, "cmprssed");
assertField(h1, fields,15, "cmprssor");
assertField(h1, fields,16, "dcomprs");
assertField(h1, fields,17, "comprs");
assertField(h1, fields,18, "pageins");
assertField(h1, fields,19, "pageout");
assertField(h1, fields,20, "swapins");
assertField(h1, fields,21, "swapouts");
}
// test data parse.
// final String h1 = " free active specul inactive throttle wired prgable faults copy 0fill reactive purged file-backed anonymous cmprssed cmprssor dcomprs comprs pageins pageout swapins swapouts";
// final String d1 = " 41993 1479331 110174 1329290 0 782241 33940 2115 1 1316 0 0 382671 2536124 1093181 449012 0 0 24 0 0 0";
{
final String[] fields = pattern.split(d1.trim(), 0/* limit */);
assertField(d1, fields, 0, "41993"); // free
assertField(d1, fields, 1, "1479331"); // active
assertField(d1, fields, 2, "110174"); // specul
assertField(d1, fields, 3, "1329290"); // inactive
assertField(d1, fields, 4, "0"); // throttle
assertField(d1, fields, 5, "782241"); // wired
assertField(d1, fields, 6, "33940"); // prgable
assertField(d1, fields, 7, "2115"); // faults
assertField(d1, fields, 8, "1"); // copy
assertField(d1, fields, 9, "1316");// 0fill
assertField(d1, fields,10, "0"); // reactive
assertField(d1, fields,11, "0"); // purged
assertField(d1, fields,12, "382671"); // file-backed
assertField(d1, fields,13, "2536124"); // anonymous
assertField(d1, fields,14, "1093181"); // cmprssed
assertField(d1, fields,15, "449012"); // cmprssor
assertField(d1, fields,16, "0"); // dcomprs
assertField(d1, fields,17, "0"); // comprs
assertField(d1, fields,18, "24"); // pageins
assertField(d1, fields,19, "0"); // pageout
assertField(d1, fields,20, "0"); // swapins
assertField(d1, fields,21, "0"); // swapouts
}
}
public void test_iostat_collector() throws IOException, InterruptedException {
String output =
"Mach Virtual Memory Statistics: (page size of 4096 bytes, cache hits 0%)\n" +
" free active spec inactive wire faults copy 0fill reactive pageins pageout\n" +
"404670 1238K 42678 161330 183963 144830K 2032186 81929280 1353888 351293 149940\n";
final VMStatCollector vmStatCollector = new VMStatCollector(1) {
@Override
public AbstractProcessReader getProcessReader() {
return new VMStatReader() {
@Override
protected ActiveProcess getActiveProcess() {
return new ActiveProcess() {
@Override
public boolean isAlive() {
return true;
}
};
}
};
}
};
final VMStatCollector.VMStatReader vmStatReader = (VMStatCollector.VMStatReader) vmStatCollector.getProcessReader();
vmStatReader.start(new ByteArrayInputStream(output.getBytes()));
Thread t = new Thread(vmStatReader);
CounterSet counterSet;
try {
t.start();
Thread.sleep(100);
counterSet = vmStatCollector.getCounters();
} finally {
t.interrupt();
}
double bytes_free = (Double) ((ICounter) counterSet.getChild(IProcessCounters.Memory).getChild("Bytes Free")).getInstrument().getValue();
assertEquals(404670*4096, bytes_free);
/*Iterator<ICounter> counters = counterSet.getCounters(Pattern.compile(".*"));
while (counters.hasNext()) {
System.err.println(counters.next().getInstrument().getValue().toString());
}*/
}
}