/
test_client.py
126 lines (114 loc) · 5.11 KB
/
test_client.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
# -*- coding: utf-8 -*-
"""
The obspy.clients.earthworm.client test suite.
"""
from __future__ import (absolute_import, division, print_function,
unicode_literals)
from future.builtins import * # NOQA @UnusedWildImport
import unittest
from obspy import read
from obspy.core.utcdatetime import UTCDateTime
from obspy.core.util import NamedTemporaryFile
from obspy.core.util.decorator import skip_on_network_error
from obspy.clients.earthworm import Client
class ClientTestCase(unittest.TestCase):
"""
Test cases for obspy.clients.earthworm.client.Client.
"""
def setUp(self):
# Monkey patch: set lower default precision of all UTCDateTime objects
UTCDateTime.DEFAULT_PRECISION = 4
self.client = Client("pubavo1.wr.usgs.gov", 16022, timeout=30.0)
def tearDown(self):
# restore default precision of all UTCDateTime objects
UTCDateTime.DEFAULT_PRECISION = 6
@skip_on_network_error
def test_get_waveform(self):
"""
Tests get_waveforms method.
"""
client = self.client
start = UTCDateTime() - 3600
end = start + 1.0
# example 1 -- 1 channel, cleanup
stream = client.get_waveforms('AV', 'ACH', '', 'EHE', start, end)
self.assertEqual(len(stream), 1)
delta = stream[0].stats.delta
trace = stream[0]
self.assertTrue(len(trace) in (100, 101))
self.assertGreaterEqual(trace.stats.starttime, start - delta)
self.assertLessEqual(trace.stats.starttime, start + delta)
self.assertGreaterEqual(trace.stats.endtime, end - delta)
self.assertLessEqual(trace.stats.endtime, end + delta)
self.assertEqual(trace.stats.network, 'AV')
self.assertEqual(trace.stats.station, 'ACH')
self.assertEqual(trace.stats.location, '')
self.assertEqual(trace.stats.channel, 'EHE')
# example 2 -- 1 channel, no cleanup
stream = client.get_waveforms('AV', 'ACH', '', 'EHE', start, end,
cleanup=False)
self.assertGreaterEqual(len(stream), 2)
summed_length = sum(len(tr) for tr in stream)
self.assertTrue(summed_length in (100, 101))
self.assertGreaterEqual(stream[0].stats.starttime, start - delta)
self.assertLessEqual(stream[0].stats.starttime, start + delta)
self.assertGreaterEqual(stream[-1].stats.endtime, end - delta)
self.assertLessEqual(stream[-1].stats.endtime, end + delta)
for trace in stream:
self.assertEqual(trace.stats.network, 'AV')
self.assertEqual(trace.stats.station, 'ACH')
self.assertEqual(trace.stats.location, '')
self.assertEqual(trace.stats.channel, 'EHE')
# example 3 -- component wildcarded with '?'
stream = client.get_waveforms('AV', 'ACH', '', 'EH?', start, end)
self.assertEqual(len(stream), 3)
for trace in stream:
self.assertTrue(len(trace) in (100, 101))
self.assertGreaterEqual(trace.stats.starttime, start - delta)
self.assertLessEqual(trace.stats.starttime, start + delta)
self.assertGreaterEqual(trace.stats.endtime, end - delta)
self.assertLessEqual(trace.stats.endtime, end + delta)
self.assertEqual(trace.stats.network, 'AV')
self.assertEqual(trace.stats.station, 'ACH')
self.assertEqual(trace.stats.location, '')
self.assertEqual(stream[0].stats.channel, 'EHZ')
self.assertEqual(stream[1].stats.channel, 'EHN')
self.assertEqual(stream[2].stats.channel, 'EHE')
@skip_on_network_error
def test_save_waveform(self):
"""
Tests save_waveforms method.
"""
# initialize client
client = self.client
start = UTCDateTime() - 3600
end = start + 1.0
with NamedTemporaryFile() as tf:
testfile = tf.name
# 1 channel, cleanup (using SLIST to avoid dependencies)
client.save_waveforms(testfile, 'AV', 'ACH', '', 'EHE', start, end,
format="SLIST")
stream = read(testfile)
self.assertEqual(len(stream), 1)
delta = stream[0].stats.delta
trace = stream[0]
self.assertEqual(len(trace), 101)
self.assertGreaterEqual(trace.stats.starttime, start - delta)
self.assertLessEqual(trace.stats.starttime, start + delta)
self.assertGreaterEqual(trace.stats.endtime, end - delta)
self.assertLessEqual(trace.stats.endtime, end + delta)
self.assertEqual(trace.stats.network, 'AV')
self.assertEqual(trace.stats.station, 'ACH')
self.assertEqual(trace.stats.location, '')
self.assertEqual(trace.stats.channel, 'EHE')
@skip_on_network_error
def test_availability(self):
data = self.client.get_availability()
seeds = ["%s.%s.%s.%s" % (d[0], d[1], d[2], d[3]) for d in data]
self.assertIn('AV.ACH.--.EHZ', seeds)
def suite():
suite = unittest.TestSuite()
suite.addTest(unittest.makeSuite(ClientTestCase, 'test'))
return suite
if __name__ == '__main__':
unittest.main(defaultTest='suite')