Initial commit based on common repo commit ffeb9c9b
This commit is contained in:
227
libs/gempa/caps/test/mseedpacket.cpp
Normal file
227
libs/gempa/caps/test/mseedpacket.cpp
Normal file
@@ -0,0 +1,227 @@
|
||||
/***************************************************************************
|
||||
* Copyright (C) 2018 by gempa GmbH *
|
||||
* *
|
||||
* All Rights Reserved. *
|
||||
* *
|
||||
* NOTICE: All information contained herein is, and remains *
|
||||
* the property of gempa GmbH and its suppliers, if any. The intellectual *
|
||||
* and technical concepts contained herein are proprietary to gempa GmbH *
|
||||
* and its suppliers. *
|
||||
* Dissemination of this information or reproduction of this material *
|
||||
* is strictly forbidden unless prior written permission is obtained *
|
||||
* from gempa GmbH. *
|
||||
* *
|
||||
* Author: Tracey Werner, Enrico Ellguth *
|
||||
* Email: tracey.werner@gempa.de, enrico.ellguth@gempa.de *
|
||||
***************************************************************************/
|
||||
|
||||
|
||||
#define SEISCOMP_TEST_MODULE gempa
|
||||
#include "test_utils.h"
|
||||
|
||||
#include <seiscomp3/unittest/unittests.h>
|
||||
|
||||
#include <gempa/caps/mseedpacket.h>
|
||||
#include <gempa/caps/rawpacket.cpp>
|
||||
#include <gempa/caps/utils.h>
|
||||
#include <gempa/caps/datetime.h>
|
||||
|
||||
#include <fstream>
|
||||
#include <iostream>
|
||||
#include <math.h>
|
||||
#include <string>
|
||||
#include <streambuf>
|
||||
|
||||
namespace bu = boost::unit_test;
|
||||
|
||||
using namespace std;
|
||||
using namespace Gempa::CAPS;
|
||||
|
||||
namespace {
|
||||
|
||||
struct Record {
|
||||
Record() {
|
||||
vector<char> mseed;
|
||||
mseed.resize(512);
|
||||
|
||||
ifstream ifs("data/AM.RFE4F.00.SHZ.20180912.mseed");
|
||||
if( ifs.is_open() ) {
|
||||
ifs.read(mseed.data(), 512);
|
||||
testRec.setData(mseed.data(), 512);
|
||||
}
|
||||
else
|
||||
BOOST_TEST_MESSAGE("unable to open test data file.");
|
||||
}
|
||||
MSEEDDataRecord testRec;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
|
||||
BOOST_AUTO_TEST_SUITE(gempa_common_caps_mseedpacket)
|
||||
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
||||
|
||||
|
||||
|
||||
|
||||
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
|
||||
BOOST_AUTO_TEST_CASE(equal_functions) {
|
||||
bu::unit_test_log.set_threshold_level(bu::log_warnings);
|
||||
bu::unit_test_log.set_threshold_level(bu::log_messages);
|
||||
|
||||
MSEEDDataRecord::Header header;
|
||||
MSEEDDataRecord::Header otherHeader;
|
||||
|
||||
header.setSamplingTime(fromString("2018-01-01 00:00:01"));
|
||||
header.samplingFrequencyNumerator = 30;
|
||||
header.samplingFrequencyDenominator = 1;
|
||||
BOOST_CHECK_EQUAL(header != otherHeader, true);
|
||||
|
||||
bool valid = header.compatible(otherHeader);
|
||||
BOOST_CHECK_EQUAL(valid, false);
|
||||
|
||||
otherHeader = header;
|
||||
valid = header.compatible(otherHeader);
|
||||
BOOST_CHECK_EQUAL(valid, true);
|
||||
BOOST_CHECK_EQUAL(header != otherHeader, false);
|
||||
}
|
||||
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
||||
|
||||
|
||||
|
||||
|
||||
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
|
||||
BOOST_AUTO_TEST_CASE(header_functions) {
|
||||
|
||||
MSEEDDataRecord::Header header;
|
||||
header.dataType = DT_INT64;
|
||||
header.samplingFrequencyNumerator = 1;
|
||||
header.samplingFrequencyDenominator = 1;
|
||||
|
||||
char buf[1024];
|
||||
arraybuf abuf(buf, 1024);
|
||||
BOOST_CHECK_EQUAL(header.put(abuf), true);
|
||||
|
||||
MSEEDDataRecord::Header otherHeader;
|
||||
BOOST_CHECK_EQUAL(otherHeader.get(abuf), true);
|
||||
BOOST_CHECK_EQUAL(otherHeader.samplingFrequencyNumerator, 1);
|
||||
BOOST_CHECK_EQUAL(otherHeader.samplingFrequencyDenominator, 1);
|
||||
BOOST_CHECK_EQUAL(otherHeader.dataType, DT_INT64);
|
||||
}
|
||||
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
||||
|
||||
|
||||
|
||||
|
||||
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
|
||||
BOOST_AUTO_TEST_CASE(trim_function) {
|
||||
// MSEEDs records can not be trimmed -> always false
|
||||
MSEEDDataRecord testRec;
|
||||
BOOST_CHECK(!testRec.canTrim());
|
||||
}
|
||||
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
||||
|
||||
|
||||
|
||||
|
||||
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
|
||||
BOOST_AUTO_TEST_CASE(merge_function) {
|
||||
// MSEEDs records can not be merged -> always false
|
||||
MSEEDDataRecord testRec;
|
||||
BOOST_CHECK(!testRec.canMerge());
|
||||
}
|
||||
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
||||
|
||||
|
||||
|
||||
|
||||
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
|
||||
BOOST_AUTO_TEST_SUITE_END()
|
||||
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
||||
|
||||
|
||||
|
||||
|
||||
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
|
||||
BOOST_FIXTURE_TEST_CASE(getter_and_setter, Record) {
|
||||
BOOST_CHECK_EQUAL("MSEED", testRec.formatName());
|
||||
|
||||
// get data size with and without header
|
||||
size_t sizeWithout = testRec.dataSize(false);
|
||||
BOOST_CHECK_EQUAL(sizeWithout, 512);
|
||||
|
||||
size_t sizeWith = testRec.dataSize(true);
|
||||
BOOST_CHECK_EQUAL(512, sizeWith);
|
||||
|
||||
// check start end end time
|
||||
BOOST_CHECK_EQUAL(testRec.startTime().iso(), "2018-09-12T10:55:56.751Z");
|
||||
BOOST_CHECK_EQUAL(testRec.endTime().iso(), "2018-09-12T10:56:03.511Z");
|
||||
|
||||
// check sampling frequency
|
||||
BOOST_CHECK_EQUAL(testRec.header()->samplingFrequencyNumerator, 50);
|
||||
BOOST_CHECK_EQUAL(testRec.header()->samplingFrequencyDenominator, 1);
|
||||
|
||||
// check packet type
|
||||
BOOST_CHECK_EQUAL(testRec.packetType(), MSEEDPacket);
|
||||
}
|
||||
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
||||
|
||||
|
||||
|
||||
|
||||
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
|
||||
BOOST_FIXTURE_TEST_CASE(read_header_from_buffer, Record) {
|
||||
char data[512];
|
||||
|
||||
// write test record data into a buffer
|
||||
arraybuf abuf(data, 512);
|
||||
BOOST_CHECK(testRec.put(abuf, true));
|
||||
|
||||
Time startTime, endTime;
|
||||
MSEEDDataRecord::Header header;
|
||||
|
||||
// read start, end time and further information from buffer
|
||||
MSEEDDataRecord rec;
|
||||
rec.readMetaData(abuf, 512, header, startTime, endTime);
|
||||
|
||||
BOOST_CHECK_EQUAL(startTime.iso(), "2018-09-12T10:55:56.751Z");
|
||||
BOOST_CHECK_EQUAL(endTime.iso(), "2018-09-12T10:56:03.511Z");
|
||||
BOOST_CHECK_EQUAL(header.dataType, DT_INT32);
|
||||
}
|
||||
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
||||
|
||||
|
||||
|
||||
|
||||
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
|
||||
BOOST_FIXTURE_TEST_CASE(read_data_from_file, Record) {
|
||||
ifstream ifs("data/AM.RFE4F.00.SHZ.20180912.mseed");
|
||||
BOOST_CHECK(ifs.is_open());
|
||||
|
||||
vector<char> buf;
|
||||
buf.resize(512);
|
||||
ifs.read(buf.data(), 512);
|
||||
|
||||
MSEEDDataRecord rec;
|
||||
rec.setData(buf.data(),512);
|
||||
|
||||
BOOST_CHECK_EQUAL(rec.header()->samplingFrequencyDenominator, 1);
|
||||
BOOST_CHECK_EQUAL(rec.header()->samplingFrequencyNumerator, 50);
|
||||
|
||||
TimeSpan timeSpan = samplesToTimeSpan(*rec.header(), 338);
|
||||
|
||||
// check that the record start time + all samples is equal to
|
||||
// the record end time
|
||||
Time endTime = rec.startTime() + timeSpan;
|
||||
BOOST_CHECK(endTime == rec.endTime());
|
||||
|
||||
// check both header are equal
|
||||
BOOST_CHECK_EQUAL(rec.header()->compatible(*testRec.header()), true);
|
||||
|
||||
}
|
||||
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
||||
|
||||
|
||||
|
||||
|
||||
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
|
||||
Reference in New Issue
Block a user