Merge branch 'android_tests_refactoring'

This commit is contained in:
Jack Robison 2017-10-25 12:06:06 -04:00
commit 7ebfe77515
No known key found for this signature in database
GPG key ID: 284699E7404E3CFF
10 changed files with 46 additions and 20 deletions

View file

@ -29,6 +29,7 @@ at anytime.
* Use the first port available for the peer and dht ports, starting with the provided values (defaults of 3333 and 4444). This allows multiple lbrynet instances in a LAN with UPnP.
* Detect a UPnP redirect that didn't get cleaned up on a previous run and use it
* Bumped jsonschema requirement to 2.6.0
* Refactor some assert statements to accommodate the PYTHONOPTIMIZE flag set for Android.
### Added
*

View file

@ -352,7 +352,8 @@ class Config(object):
return env_settings
def _assert_valid_data_type(self, data_type):
assert data_type in self._data, KeyError('{} in is not a valid data type'.format(data_type))
if not data_type in self._data:
raise KeyError('{} in is not a valid data type'.format(data_type))
def get_valid_setting_names(self):
return self._data[TYPE_DEFAULT].keys()
@ -361,8 +362,8 @@ class Config(object):
return name in self.get_valid_setting_names()
def _assert_valid_setting(self, name):
assert self._is_valid_setting(name), \
KeyError('{} is not a valid setting'.format(name))
if not self._is_valid_setting(name):
raise KeyError('{} is not a valid setting'.format(name))
def _validate_settings(self, data):
invalid_settings = set(data.keys()) - set(self.get_valid_setting_names())
@ -371,8 +372,8 @@ class Config(object):
def _assert_editable_setting(self, name):
self._assert_valid_setting(name)
assert name not in self._fixed_defaults, \
ValueError('{} is not an editable setting'.format(name))
if name in self._fixed_defaults:
raise ValueError('{} is not an editable setting'.format(name))
def _validate_currency(self, currency):
if currency not in self._fixed_defaults['CURRENCIES'].keys():

View file

@ -1231,7 +1231,7 @@ class Daemon(AuthJSONRPCServer):
)
return self._render_response({
'help': textwrap.dedent(fn.__doc__)
'help': textwrap.dedent(fn.__doc__ or '')
})
def jsonrpc_commands(self):

View file

@ -17,8 +17,10 @@ COINBASE_FEE = 0.0 #add fee
class ExchangeRate(object):
def __init__(self, market, spot, ts):
assert int(time.time()) - ts < 600
assert spot > 0
if not int(time.time()) - ts < 600:
raise ValueError('The timestamp is too dated.')
if not spot > 0:
raise ValueError('Spot must be greater than 0.')
self.currency_pair = (market[0:3], market[3:6])
self.spot = spot
self.ts = ts

View file

@ -33,7 +33,7 @@ from lbrynet.core.server.BlobRequestHandler import BlobRequestHandlerFactory
from lbrynet.core.server.ServerProtocol import ServerProtocolFactory
from lbrynet.tests import mocks
from lbrynet.tests.util import mk_db_and_blob_dir, rm_db_and_blob_dir
from lbrynet.tests.util import mk_db_and_blob_dir, rm_db_and_blob_dir, is_android
FakeNode = mocks.Node
FakeWallet = mocks.Wallet
@ -490,6 +490,9 @@ class TestTransfer(TestCase):
return d
@unittest.skipIf(is_android(),
'Test cannot pass on Android because multiprocessing '
'is not supported at the OS level.')
def test_lbry_transfer(self):
sd_hash_queue = Queue()
kill_event = Event()
@ -577,6 +580,9 @@ class TestTransfer(TestCase):
return d
@unittest.skipIf(is_android(),
'Test cannot pass on Android because multiprocessing '
'is not supported at the OS level.')
def test_last_blob_retrieval(self):
kill_event = Event()
dead_event_1 = Event()
@ -659,6 +665,9 @@ class TestTransfer(TestCase):
d.addBoth(stop)
return d
@unittest.skipIf(is_android(),
'Test cannot pass on Android because multiprocessing '
'is not supported at the OS level.')
def test_double_download(self):
sd_hash_queue = Queue()
kill_event = Event()

View file

@ -2,13 +2,15 @@ import StringIO
import logging
import mock
import unittest
from twisted.internet import defer
from twisted.trial import unittest
from twisted import trial
from lbrynet.core import log_support
from lbrynet.tests.util import is_android
class TestLogger(unittest.TestCase):
class TestLogger(trial.unittest.TestCase):
def raiseError(self):
raise Exception('terrible things happened')
@ -26,12 +28,15 @@ class TestLogger(unittest.TestCase):
handler.setFormatter(logging.Formatter("%(filename)s:%(lineno)d - %(message)s"))
self.log.addHandler(handler)
@unittest.skipIf(is_android(),
'Test cannot pass on Android because the tests package is compiled '
'which results in a different method call stack')
def test_can_log_failure(self):
def output_lines():
return self.stream.getvalue().split('\n')
# the line number could change if this file gets refactored
expected_first_line = 'test_log_support.py:18 - My message: terrible things happened'
expected_first_line = 'test_log_support.py:20 - My message: terrible things happened'
# testing the entirety of the message is futile as the
# traceback will depend on the system the test is being run on

View file

@ -1,8 +1,9 @@
import mock
import json
import unittest
from twisted.internet import defer
from twisted.trial import unittest
from twisted import trial
from lbryschema.decode import smart_decode
from lbrynet import conf
@ -14,6 +15,8 @@ from lbrynet.tests.mocks import mock_conf_settings, FakeNetwork
from lbrynet.tests.mocks import BlobAvailabilityTracker as DummyBlobAvailabilityTracker
from lbrynet.tests.mocks import ExchangeRateManager as DummyExchangeRateManager
from lbrynet.tests.mocks import BTCLBCFeed, USDBTCFeed
from lbrynet.tests.util import is_android
import logging
logging.getLogger("lbryum").setLevel(logging.WARNING)
@ -63,7 +66,7 @@ def get_test_daemon(data_rate=None, generous=True, with_fee=False):
return daemon
class TestCostEst(unittest.TestCase):
class TestCostEst(trial.unittest.TestCase):
def setUp(self):
mock_conf_settings(self)
util.resetTime(self)
@ -96,7 +99,7 @@ class TestCostEst(unittest.TestCase):
self.assertEquals(daemon.get_est_cost("test", size).result, correct_result)
class TestJsonRpc(unittest.TestCase):
class TestJsonRpc(trial.unittest.TestCase):
def setUp(self):
def noop():
return None
@ -112,6 +115,8 @@ class TestJsonRpc(unittest.TestCase):
d = defer.maybeDeferred(self.test_daemon.jsonrpc_status)
d.addCallback(lambda status: self.assertDictContainsSubset({'is_running': False}, status))
@unittest.skipIf(is_android(),
'Test cannot pass on Android because PYTHONOPTIMIZE removes the docstrings.')
def test_help(self):
d = defer.maybeDeferred(self.test_daemon.jsonrpc_help, command='status')
d.addCallback(lambda result: self.assertSubstring('daemon status', result['help']))

View file

@ -35,9 +35,9 @@ class ExchangeRateTest(unittest.TestCase):
util.resetTime(self)
def test_invalid_rates(self):
with self.assertRaises(AssertionError):
with self.assertRaises(ValueError):
ExchangeRateManager.ExchangeRate('USDBTC', 0, util.DEFAULT_ISO_TIME)
with self.assertRaises(AssertionError):
with self.assertRaises(ValueError):
ExchangeRateManager.ExchangeRate('USDBTC', -1, util.DEFAULT_ISO_TIME)

View file

@ -39,12 +39,12 @@ class SettingsTest(unittest.TestCase):
def test_invalid_setting_raises_exception(self):
settings = self.get_mock_config_instance()
self.assertRaises(AssertionError, settings.set, 'invalid_name', 123)
self.assertRaises(KeyError, settings.set, 'invalid_name', 123)
def test_invalid_data_type_raises_exception(self):
settings = self.get_mock_config_instance()
self.assertIsNone(settings.set('test', 123))
self.assertRaises(AssertionError, settings.set, 'test', 123, ('fake_data_type',))
self.assertRaises(KeyError, settings.set, 'test', 123, ('fake_data_type',))
def test_setting_precedence(self):
settings = self.get_mock_config_instance()

View file

@ -36,3 +36,6 @@ def resetTime(test_case, timestamp=DEFAULT_TIMESTAMP):
patcher = mock.patch('lbrynet.core.utils.utcnow')
patcher.start().return_value = timestamp
test_case.addCleanup(patcher.stop)
def is_android():
return 'ANDROID_ARGUMENT' in os.environ # detect Android using the Kivy way