mirror of
https://github.com/craigerl/aprsd.git
synced 2026-06-01 21:54:42 -04:00
Added unit tests for packets.
Also did some code cleanup.
This commit is contained in:
@@ -7,29 +7,28 @@ from aprsd.plugins import fortune as fortune_plugin
|
||||
|
||||
from .. import fake, test_plugin
|
||||
|
||||
|
||||
CONF = cfg.CONF
|
||||
|
||||
|
||||
class TestFortunePlugin(test_plugin.TestPlugin):
|
||||
@mock.patch("shutil.which")
|
||||
@mock.patch('shutil.which')
|
||||
def test_fortune_fail(self, mock_which):
|
||||
mock_which.return_value = None
|
||||
fortune = fortune_plugin.FortunePlugin()
|
||||
expected = "FortunePlugin isn't enabled"
|
||||
packet = fake.fake_packet(message="fortune")
|
||||
packet = fake.fake_packet(message='fortune')
|
||||
actual = fortune.filter(packet)
|
||||
self.assertEqual(expected, actual)
|
||||
|
||||
@mock.patch("subprocess.check_output")
|
||||
@mock.patch("shutil.which")
|
||||
@mock.patch('subprocess.check_output')
|
||||
@mock.patch('shutil.which')
|
||||
def test_fortune_success(self, mock_which, mock_output):
|
||||
mock_which.return_value = "/usr/bin/games/fortune"
|
||||
mock_output.return_value = "Funny fortune"
|
||||
mock_which.return_value = '/usr/bin/games/fortune'
|
||||
mock_output.return_value = 'Funny fortune'
|
||||
CONF.callsign = fake.FAKE_TO_CALLSIGN
|
||||
fortune = fortune_plugin.FortunePlugin()
|
||||
|
||||
expected = "Funny fortune"
|
||||
packet = fake.fake_packet(message="fortune")
|
||||
expected = 'Funny fortune'
|
||||
packet = fake.fake_packet(message='fortune')
|
||||
actual = fortune.filter(packet)
|
||||
self.assertEqual(expected, actual)
|
||||
|
||||
@@ -7,12 +7,11 @@ from aprsd.plugins import ping as ping_plugin
|
||||
|
||||
from .. import fake, test_plugin
|
||||
|
||||
|
||||
CONF = cfg.CONF
|
||||
|
||||
|
||||
class TestPingPlugin(test_plugin.TestPlugin):
|
||||
@mock.patch("time.localtime")
|
||||
@mock.patch('time.localtime')
|
||||
def test_ping(self, mock_time):
|
||||
fake_time = mock.MagicMock()
|
||||
h = fake_time.tm_hour = 16
|
||||
@@ -24,7 +23,7 @@ class TestPingPlugin(test_plugin.TestPlugin):
|
||||
ping = ping_plugin.PingPlugin()
|
||||
|
||||
packet = fake.fake_packet(
|
||||
message="location",
|
||||
message='location',
|
||||
msg_number=1,
|
||||
)
|
||||
|
||||
@@ -33,16 +32,16 @@ class TestPingPlugin(test_plugin.TestPlugin):
|
||||
|
||||
def ping_str(h, m, s):
|
||||
return (
|
||||
"Pong! "
|
||||
'Pong! '
|
||||
+ str(h).zfill(2)
|
||||
+ ":"
|
||||
+ ':'
|
||||
+ str(m).zfill(2)
|
||||
+ ":"
|
||||
+ ':'
|
||||
+ str(s).zfill(2)
|
||||
)
|
||||
|
||||
packet = fake.fake_packet(
|
||||
message="Ping",
|
||||
message='Ping',
|
||||
msg_number=1,
|
||||
)
|
||||
actual = ping.filter(packet)
|
||||
@@ -50,7 +49,7 @@ class TestPingPlugin(test_plugin.TestPlugin):
|
||||
self.assertEqual(expected, actual)
|
||||
|
||||
packet = fake.fake_packet(
|
||||
message="ping",
|
||||
message='ping',
|
||||
msg_number=1,
|
||||
)
|
||||
actual = ping.filter(packet)
|
||||
|
||||
@@ -12,26 +12,26 @@ CONF = cfg.CONF
|
||||
|
||||
|
||||
class TestTimePlugins(test_plugin.TestPlugin):
|
||||
@mock.patch("aprsd.plugins.time.TimePlugin._get_local_tz")
|
||||
@mock.patch("aprsd.plugins.time.TimePlugin._get_utcnow")
|
||||
@mock.patch('aprsd.plugins.time.TimePlugin._get_local_tz')
|
||||
@mock.patch('aprsd.plugins.time.TimePlugin._get_utcnow')
|
||||
def test_time(self, mock_utcnow, mock_localtz):
|
||||
utcnow = pytz.datetime.datetime.utcnow()
|
||||
mock_utcnow.return_value = utcnow
|
||||
tz = pytz.timezone("US/Pacific")
|
||||
tz = pytz.timezone('US/Pacific')
|
||||
mock_localtz.return_value = tz
|
||||
|
||||
gmt_t = pytz.utc.localize(utcnow)
|
||||
local_t = gmt_t.astimezone(tz)
|
||||
|
||||
fake_time = mock.MagicMock()
|
||||
h = int(local_t.strftime("%H"))
|
||||
m = int(local_t.strftime("%M"))
|
||||
h = int(local_t.strftime('%H'))
|
||||
m = int(local_t.strftime('%M'))
|
||||
fake_time.tm_sec = 13
|
||||
CONF.callsign = fake.FAKE_TO_CALLSIGN
|
||||
time = time_plugin.TimePlugin()
|
||||
|
||||
packet = fake.fake_packet(
|
||||
message="location",
|
||||
message='location',
|
||||
msg_number=1,
|
||||
)
|
||||
|
||||
@@ -41,11 +41,11 @@ class TestTimePlugins(test_plugin.TestPlugin):
|
||||
cur_time = fuzzy(h, m, 1)
|
||||
|
||||
packet = fake.fake_packet(
|
||||
message="time",
|
||||
message='time',
|
||||
msg_number=1,
|
||||
)
|
||||
local_short_str = local_t.strftime("%H:%M %Z")
|
||||
expected = "{} ({})".format(
|
||||
local_short_str = local_t.strftime('%H:%M %Z')
|
||||
expected = '{} ({})'.format(
|
||||
cur_time,
|
||||
local_short_str,
|
||||
)
|
||||
|
||||
@@ -18,89 +18,89 @@ class TestUSWeatherPlugin(test_plugin.TestPlugin):
|
||||
CONF.callsign = fake.FAKE_TO_CALLSIGN
|
||||
wx = weather_plugin.USWeatherPlugin()
|
||||
expected = "USWeatherPlugin isn't enabled"
|
||||
packet = fake.fake_packet(message="weather")
|
||||
packet = fake.fake_packet(message='weather')
|
||||
actual = wx.filter(packet)
|
||||
self.assertEqual(expected, actual)
|
||||
|
||||
@mock.patch("aprsd.plugin_utils.get_aprs_fi")
|
||||
@mock.patch('aprsd.plugin_utils.get_aprs_fi')
|
||||
def test_failed_aprs_fi_location(self, mock_check):
|
||||
# When the aprs.fi api key isn't set, then
|
||||
# the Plugin will be disabled.
|
||||
mock_check.side_effect = Exception
|
||||
CONF.aprs_fi.apiKey = "abc123"
|
||||
CONF.aprs_fi.apiKey = 'abc123'
|
||||
CONF.callsign = fake.FAKE_TO_CALLSIGN
|
||||
wx = weather_plugin.USWeatherPlugin()
|
||||
expected = "Failed to fetch aprs.fi location"
|
||||
packet = fake.fake_packet(message="weather")
|
||||
expected = 'Failed to fetch aprs.fi location'
|
||||
packet = fake.fake_packet(message='weather')
|
||||
actual = wx.filter(packet)
|
||||
self.assertEqual(expected, actual)
|
||||
|
||||
@mock.patch("aprsd.plugin_utils.get_aprs_fi")
|
||||
@mock.patch('aprsd.plugin_utils.get_aprs_fi')
|
||||
def test_failed_aprs_fi_location_no_entries(self, mock_check):
|
||||
# When the aprs.fi api key isn't set, then
|
||||
# the Plugin will be disabled.
|
||||
mock_check.return_value = {"entries": []}
|
||||
CONF.aprs_fi.apiKey = "abc123"
|
||||
mock_check.return_value = {'entries': []}
|
||||
CONF.aprs_fi.apiKey = 'abc123'
|
||||
CONF.callsign = fake.FAKE_TO_CALLSIGN
|
||||
wx = weather_plugin.USWeatherPlugin()
|
||||
wx.enabled = True
|
||||
expected = "Failed to fetch aprs.fi location"
|
||||
packet = fake.fake_packet(message="weather")
|
||||
expected = 'Failed to fetch aprs.fi location'
|
||||
packet = fake.fake_packet(message='weather')
|
||||
actual = wx.filter(packet)
|
||||
self.assertEqual(expected, actual)
|
||||
|
||||
@mock.patch("aprsd.plugin_utils.get_aprs_fi")
|
||||
@mock.patch("aprsd.plugin_utils.get_weather_gov_for_gps")
|
||||
@mock.patch('aprsd.plugin_utils.get_aprs_fi')
|
||||
@mock.patch('aprsd.plugin_utils.get_weather_gov_for_gps')
|
||||
def test_unknown_gps(self, mock_weather, mock_check_aprs):
|
||||
# When the aprs.fi api key isn't set, then
|
||||
# the LocationPlugin will be disabled.
|
||||
mock_check_aprs.return_value = {
|
||||
"entries": [
|
||||
'entries': [
|
||||
{
|
||||
"lat": 10,
|
||||
"lng": 11,
|
||||
"lasttime": 10,
|
||||
'lat': 10,
|
||||
'lng': 11,
|
||||
'lasttime': 10,
|
||||
},
|
||||
],
|
||||
}
|
||||
mock_weather.side_effect = Exception
|
||||
CONF.aprs_fi.apiKey = "abc123"
|
||||
CONF.aprs_fi.apiKey = 'abc123'
|
||||
CONF.callsign = fake.FAKE_TO_CALLSIGN
|
||||
wx = weather_plugin.USWeatherPlugin()
|
||||
wx.enabled = True
|
||||
expected = "Unable to get weather"
|
||||
packet = fake.fake_packet(message="weather")
|
||||
expected = 'Unable to get weather'
|
||||
packet = fake.fake_packet(message='weather')
|
||||
actual = wx.filter(packet)
|
||||
self.assertEqual(expected, actual)
|
||||
|
||||
@mock.patch("aprsd.plugin_utils.get_aprs_fi")
|
||||
@mock.patch("aprsd.plugin_utils.get_weather_gov_for_gps")
|
||||
@mock.patch('aprsd.plugin_utils.get_aprs_fi')
|
||||
@mock.patch('aprsd.plugin_utils.get_weather_gov_for_gps')
|
||||
def test_working(self, mock_weather, mock_check_aprs):
|
||||
# When the aprs.fi api key isn't set, then
|
||||
# the LocationPlugin will be disabled.
|
||||
mock_check_aprs.return_value = {
|
||||
"entries": [
|
||||
'entries': [
|
||||
{
|
||||
"lat": 10,
|
||||
"lng": 11,
|
||||
"lasttime": 10,
|
||||
'lat': 10,
|
||||
'lng': 11,
|
||||
'lasttime': 10,
|
||||
},
|
||||
],
|
||||
}
|
||||
mock_weather.return_value = {
|
||||
"currentobservation": {"Temp": "400"},
|
||||
"data": {
|
||||
"temperature": ["10", "11"],
|
||||
"weather": ["test", "another"],
|
||||
'currentobservation': {'Temp': '400'},
|
||||
'data': {
|
||||
'temperature': ['10', '11'],
|
||||
'weather': ['test', 'another'],
|
||||
},
|
||||
"time": {"startPeriodName": ["ignored", "sometime"]},
|
||||
'time': {'startPeriodName': ['ignored', 'sometime']},
|
||||
}
|
||||
CONF.aprs_fi.apiKey = "abc123"
|
||||
CONF.aprs_fi.apiKey = 'abc123'
|
||||
CONF.callsign = fake.FAKE_TO_CALLSIGN
|
||||
wx = weather_plugin.USWeatherPlugin()
|
||||
wx.enabled = True
|
||||
expected = "400F(10F/11F) test. sometime, another."
|
||||
packet = fake.fake_packet(message="weather")
|
||||
expected = '400F(10F/11F) test. sometime, another.'
|
||||
packet = fake.fake_packet(message='weather')
|
||||
actual = wx.filter(packet)
|
||||
self.assertEqual(expected, actual)
|
||||
|
||||
@@ -112,93 +112,93 @@ class TestUSMetarPlugin(test_plugin.TestPlugin):
|
||||
CONF.aprs_fi.apiKey = None
|
||||
wx = weather_plugin.USMetarPlugin()
|
||||
expected = "USMetarPlugin isn't enabled"
|
||||
packet = fake.fake_packet(message="metar")
|
||||
packet = fake.fake_packet(message='metar')
|
||||
actual = wx.filter(packet)
|
||||
self.assertEqual(expected, actual)
|
||||
|
||||
@mock.patch("aprsd.plugin_utils.get_aprs_fi")
|
||||
@mock.patch('aprsd.plugin_utils.get_aprs_fi')
|
||||
def test_failed_aprs_fi_location(self, mock_check):
|
||||
# When the aprs.fi api key isn't set, then
|
||||
# the Plugin will be disabled.
|
||||
mock_check.side_effect = Exception
|
||||
CONF.aprs_fi.apiKey = "abc123"
|
||||
CONF.aprs_fi.apiKey = 'abc123'
|
||||
CONF.callsign = fake.FAKE_TO_CALLSIGN
|
||||
wx = weather_plugin.USMetarPlugin()
|
||||
wx.enabled = True
|
||||
expected = "Failed to fetch aprs.fi location"
|
||||
packet = fake.fake_packet(message="metar")
|
||||
expected = 'Failed to fetch aprs.fi location'
|
||||
packet = fake.fake_packet(message='metar')
|
||||
actual = wx.filter(packet)
|
||||
self.assertEqual(expected, actual)
|
||||
|
||||
@mock.patch("aprsd.plugin_utils.get_aprs_fi")
|
||||
@mock.patch('aprsd.plugin_utils.get_aprs_fi')
|
||||
def test_failed_aprs_fi_location_no_entries(self, mock_check):
|
||||
# When the aprs.fi api key isn't set, then
|
||||
# the Plugin will be disabled.
|
||||
mock_check.return_value = {"entries": []}
|
||||
CONF.aprs_fi.apiKey = "abc123"
|
||||
mock_check.return_value = {'entries': []}
|
||||
CONF.aprs_fi.apiKey = 'abc123'
|
||||
CONF.callsign = fake.FAKE_TO_CALLSIGN
|
||||
wx = weather_plugin.USMetarPlugin()
|
||||
wx.enabled = True
|
||||
expected = "Failed to fetch aprs.fi location"
|
||||
packet = fake.fake_packet(message="metar")
|
||||
expected = 'Failed to fetch aprs.fi location'
|
||||
packet = fake.fake_packet(message='metar')
|
||||
actual = wx.filter(packet)
|
||||
self.assertEqual(expected, actual)
|
||||
|
||||
@mock.patch("aprsd.plugin_utils.get_weather_gov_metar")
|
||||
@mock.patch('aprsd.plugin_utils.get_weather_gov_metar')
|
||||
def test_gov_metar_fetch_fails(self, mock_metar):
|
||||
mock_metar.side_effect = Exception
|
||||
CONF.aprs_fi.apiKey = "abc123"
|
||||
CONF.aprs_fi.apiKey = 'abc123'
|
||||
CONF.callsign = fake.FAKE_TO_CALLSIGN
|
||||
wx = weather_plugin.USMetarPlugin()
|
||||
wx.enabled = True
|
||||
expected = "Unable to find station METAR"
|
||||
packet = fake.fake_packet(message="metar KPAO")
|
||||
expected = 'Unable to find station METAR'
|
||||
packet = fake.fake_packet(message='metar KPAO')
|
||||
actual = wx.filter(packet)
|
||||
self.assertEqual(expected, actual)
|
||||
|
||||
@mock.patch("aprsd.plugin_utils.get_weather_gov_metar")
|
||||
@mock.patch('aprsd.plugin_utils.get_weather_gov_metar')
|
||||
def test_airport_works(self, mock_metar):
|
||||
class Response:
|
||||
text = '{"properties": {"rawMessage": "BOGUSMETAR"}}'
|
||||
|
||||
mock_metar.return_value = Response()
|
||||
|
||||
CONF.aprs_fi.apiKey = "abc123"
|
||||
CONF.aprs_fi.apiKey = 'abc123'
|
||||
CONF.callsign = fake.FAKE_TO_CALLSIGN
|
||||
wx = weather_plugin.USMetarPlugin()
|
||||
wx.enabled = True
|
||||
expected = "BOGUSMETAR"
|
||||
packet = fake.fake_packet(message="metar KPAO")
|
||||
expected = 'BOGUSMETAR'
|
||||
packet = fake.fake_packet(message='metar KPAO')
|
||||
actual = wx.filter(packet)
|
||||
self.assertEqual(expected, actual)
|
||||
|
||||
@mock.patch("aprsd.plugin_utils.get_weather_gov_metar")
|
||||
@mock.patch("aprsd.plugin_utils.get_aprs_fi")
|
||||
@mock.patch("aprsd.plugin_utils.get_weather_gov_for_gps")
|
||||
@mock.patch('aprsd.plugin_utils.get_weather_gov_metar')
|
||||
@mock.patch('aprsd.plugin_utils.get_aprs_fi')
|
||||
@mock.patch('aprsd.plugin_utils.get_weather_gov_for_gps')
|
||||
def test_metar_works(self, mock_wx_for_gps, mock_check_aprs, mock_metar):
|
||||
mock_wx_for_gps.return_value = {
|
||||
"location": {"metar": "BOGUSMETAR"},
|
||||
'location': {'metar': 'BOGUSMETAR'},
|
||||
}
|
||||
|
||||
class Response:
|
||||
text = '{"properties": {"rawMessage": "BOGUSMETAR"}}'
|
||||
|
||||
mock_check_aprs.return_value = {
|
||||
"entries": [
|
||||
'entries': [
|
||||
{
|
||||
"lat": 10,
|
||||
"lng": 11,
|
||||
"lasttime": 10,
|
||||
'lat': 10,
|
||||
'lng': 11,
|
||||
'lasttime': 10,
|
||||
},
|
||||
],
|
||||
}
|
||||
mock_metar.return_value = Response()
|
||||
|
||||
CONF.aprs_fi.apiKey = "abc123"
|
||||
CONF.aprs_fi.apiKey = 'abc123'
|
||||
CONF.callsign = fake.FAKE_TO_CALLSIGN
|
||||
wx = weather_plugin.USMetarPlugin()
|
||||
wx.enabled = True
|
||||
expected = "BOGUSMETAR"
|
||||
packet = fake.fake_packet(message="metar")
|
||||
expected = 'BOGUSMETAR'
|
||||
packet = fake.fake_packet(message='metar')
|
||||
actual = wx.filter(packet)
|
||||
self.assertEqual(expected, actual)
|
||||
|
||||
Reference in New Issue
Block a user