示例#1
0
 def test_run(self):
     with mock.patch('downstream_farmer.farmer.restore', autospec=True) as r,\
             mock.patch('six.moves.urllib.request.urlopen') as patch:
         r.side_effect = MockRestore(
             {'historyfile': dict(), 'identityfile': dict()})
         farmer = Farmer(self.test_args)
     with mock.patch('downstream_farmer.farmer.DownstreamClient') as patch,\
             mock.patch('downstream_farmer.farmer.save', autospec=True) as s,\
             mock.patch.object(Farmer, 'wait_for_shutdown') as w:
         patch.return_value.token = 'foo'
         patch.return_value.address = 'bar'
         farmer.run(True)
         patch.assert_called_with(
             farmer.url,
             farmer.token,
             farmer.address,
             farmer.size,
             '',
             '',
             farmer,
             farmer.chunk_dir)
         patch.return_value.run_async.assert_called_with(
             True, farmer.number)
         self.assertTrue(w.called)
         self.assertTrue(patch.return_value.connect.called)
         self.assertEqual(farmer
                          .state['nodes'][patch.return_value
                                          .server]['token'],
                          patch.return_value.token)
         self.assertEqual(farmer
                          .state['nodes'][patch.return_value
                                          .server]['address'],
                          patch.return_value.address)
         self.assertTrue(s.called)
示例#2
0
 def test_run(self):
     with mock.patch('downstream_farmer.farmer.restore', autospec=True) as r,\
             mock.patch('six.moves.urllib.request.urlopen') as patch:
         r.side_effect = MockRestore({
             'historyfile': dict(),
             'identityfile': dict()
         })
         farmer = Farmer(self.test_args)
     with mock.patch('downstream_farmer.farmer.DownstreamClient') as patch,\
             mock.patch('downstream_farmer.farmer.save', autospec=True) as s,\
             mock.patch.object(Farmer, 'wait_for_shutdown') as w:
         patch.return_value.token = 'foo'
         patch.return_value.address = 'bar'
         farmer.run(True)
         patch.assert_called_with(farmer.url, farmer.token, farmer.address,
                                  farmer.size, '', '', farmer,
                                  farmer.chunk_dir)
         patch.return_value.run_async.assert_called_with(
             True, farmer.number)
         self.assertTrue(w.called)
         self.assertTrue(patch.return_value.connect.called)
         self.assertEqual(
             farmer.state['nodes'][patch.return_value.server]['token'],
             patch.return_value.token)
         self.assertEqual(
             farmer.state['nodes'][patch.return_value.server]['address'],
             patch.return_value.address)
         self.assertTrue(s.called)
示例#3
0
 def test_run_unable_to_connect(self):
     with mock.patch('downstream_farmer.farmer.restore', autospec=True) as r,\
             mock.patch('six.moves.urllib.request.urlopen') as patch:
         r.side_effect = MockRestore(
             {'historyfile': dict(), 'identityfile': dict()})
         farmer = Farmer(self.test_args)
     with mock.patch('downstream_farmer.farmer.DownstreamClient') as patch:
         patch.return_value.connect.side_effect = DownstreamError(
             'test error')
         with self.assertRaises(DownstreamError) as ex:
             farmer.run(True)
         self.assertEqual(str(ex.exception), 'test error')
示例#4
0
    def test_check_connectivity(self):
        with mock.patch('downstream_farmer.farmer.restore', autospec=True) as r,\
                mock.patch('six.moves.urllib.request.urlopen') as patch:
            r.side_effect = MockRestore(
                {'historyfile': dict(), 'identityfile': dict()})
            farmer = Farmer(self.test_args)
            patch.side_effect = URLError('Problem')
            with self.assertRaises(DownstreamError):
                farmer.check_connectivity()

        with mock.patch('six.moves.urllib.request.urlopen') as patch:
            farmer.check_connectivity()
            self.assertTrue(patch.called)
示例#5
0
 def test_run_unable_to_connect(self):
     with mock.patch('downstream_farmer.farmer.restore', autospec=True) as r,\
             mock.patch('six.moves.urllib.request.urlopen') as patch:
         r.side_effect = MockRestore({
             'historyfile': dict(),
             'identityfile': dict()
         })
         farmer = Farmer(self.test_args)
     with mock.patch('downstream_farmer.farmer.DownstreamClient') as patch:
         patch.return_value.connect.side_effect = DownstreamError(
             'test error')
         with self.assertRaises(DownstreamError) as ex:
             farmer.run(True)
         self.assertEqual(str(ex.exception), 'test error')
示例#6
0
 def test_run_nonexistent_token_reconnect(self):
     with mock.patch('downstream_farmer.farmer.restore', autospec=True) as r,\
             mock.patch('six.moves.urllib.request.urlopen') as patch:
         r.side_effect = MockRestore(
             {'historyfile': dict(), 'identityfile': dict()})
         farmer = Farmer(self.test_args)
     with mock.patch('downstream_farmer.farmer.DownstreamClient') as patch,\
             mock.patch('downstream_farmer.farmer.save', autospec=True),\
             mock.patch.object(Farmer, 'wait_for_shutdown'):
         patch.return_value.connect.side_effect = \
             MockRaiseOnFirstCall(
                 DownstreamError('Unable to connect: Nonexistent token.'))
         farmer.run(True)
         self.assertEqual(patch.return_value.connect.call_count, 2)
示例#7
0
 def test_run_nonexistent_token_reconnect(self):
     with mock.patch('downstream_farmer.farmer.restore', autospec=True) as r,\
             mock.patch('six.moves.urllib.request.urlopen') as patch:
         r.side_effect = MockRestore({
             'historyfile': dict(),
             'identityfile': dict()
         })
         farmer = Farmer(self.test_args)
     with mock.patch('downstream_farmer.farmer.DownstreamClient') as patch,\
             mock.patch('downstream_farmer.farmer.save', autospec=True),\
             mock.patch.object(Farmer, 'wait_for_shutdown'):
         patch.return_value.connect.side_effect = \
             MockRaiseOnFirstCall(
                 DownstreamError('Unable to connect: Nonexistent token.'))
         farmer.run(True)
         self.assertEqual(patch.return_value.connect.call_count, 2)
示例#8
0
 def test_load_signature_invalid_dict(self):
     self.test_args.token = None
     self.test_args.address = None
     with mock.patch('downstream_farmer.farmer.restore', autospec=True) as r,\
             mock.patch.object(Farmer, 'check_connectivity'):
         r.side_effect = MockRestore({
             'historyfile': dict(),
             'identityfile': {
                 'identityaddress': {
                     'invalid': 'dict'
                 }
             }
         })
         with self.assertRaises(DownstreamError) as ex:
             Farmer(self.test_args)
         self.assertEqual(
             str(ex.exception), 'The file format for the identity file '
             '{0} should be a JSON formatted dictionary like '
             'the following:\n'
             '   {{\n'
             '      "your sjcx address": {{\n'
             '         "message": "your message here",\n'
             '         "signature":  "base64 signature from '
             'bitcoin wallet or counterwallet",\n'
             '      }}\n'
             '   }}'.format(self.test_args.identity))
示例#9
0
 def test_init_address(self):
     with mock.patch('downstream_farmer.farmer.restore', autospec=True) as r,\
             mock.patch.object(Farmer, 'check_connectivity'):
         r.side_effect = MockRestore({
             'historyfile': dict(),
             'identityfile': dict()
         })
         farmer = Farmer(self.test_args)
         self.assertEqual(farmer.address, self.test_args.address)
示例#10
0
 def test_init_url_default(self):
     self.test_args.node_url = None
     with mock.patch('downstream_farmer.farmer.restore', autospec=True) as r,\
             mock.patch.object(Farmer, 'check_connectivity'):
         r.side_effect = MockRestore({
             'historyfile': dict(),
             'identityfile': dict()
         })
         farmer = Farmer(self.test_args)
         self.assertEqual(farmer.url, 'https://live.driveshare.org:8443')
示例#11
0
 def test_init_forcenew(self):
     self.test_args.forcenew = True
     with mock.patch('downstream_farmer.utils.restore', autospec=True) as r,\
             mock.patch.object(Farmer, 'check_connectivity'):
         r.side_effect = MockRestore({
             'historyfile': dict(),
             'identityfile': dict()
         })
         farmer = Farmer(self.test_args)
     self.assertIsNone(farmer.token)
示例#12
0
 def test_init_token_default(self):
     self.test_args.token = None
     with mock.patch('downstream_farmer.farmer.restore', autospec=True) \
             as r, mock.patch.object(Farmer, 'check_connectivity'):
         r.side_effect = MockRestore({
             'historyfile': dict(),
             'identityfile': dict()
         })
         farmer = Farmer(self.test_args)
         self.assertEqual(farmer.token, None)
示例#13
0
 def test_prepare_chunk_dir(self):
     with mock.patch('downstream_farmer.farmer.restore', autospec=True) as r,\
             mock.patch('six.moves.urllib.request.urlopen'),\
             mock.patch('downstream_farmer.farmer.os') as os_patch:
         r.side_effect = MockRestore({
             'historyfile': dict(),
             'identityfile': dict()
         })
         os_patch.path.isdir.return_value = False
         farmer = Farmer(self.test_args)
         os_patch.mkdir.assert_called_with(farmer.chunk_dir)
示例#14
0
 def test_init_url(self):
     self.test_args.node_url = 'testurl'
     with mock.patch('downstream_farmer.utils.restore', autospec=True) as r,\
             mock.patch.object(Farmer, 'check_connectivity'):
         r.side_effect = MockRestore({
             'historyfile': dict(),
             'identityfile': dict()
         })
         farmer = Farmer(self.test_args)
         self.assertEqual(farmer.url, self.test_args.node_url)
         self.assertEqual(farmer.state['last_node'],
                          self.test_args.node_url)
示例#15
0
 def test_init_url_from_state(self):
     self.test_args.node_url = None
     with mock.patch('downstream_farmer.farmer.restore', autospec=True) as r,\
             mock.patch.object(Farmer, 'check_connectivity'):
         r.side_effect = MockRestore({
             'historyfile': {
                 'last_node': 'stateurl'
             },
             'identityfile': dict()
         })
         farmer = Farmer(self.test_args)
         self.assertEqual(farmer.url, 'stateurl')
示例#16
0
 def test_init_no_token_no_address(self):
     self.test_args.token = None
     self.test_args.address = None
     with mock.patch('downstream_farmer.utils.restore', autospec=True) as r,\
             mock.patch.object(Farmer, 'check_connectivity'),\
             self.assertRaises(DownstreamError) as ex:
         r.side_effect = MockRestore({
             'historyfile': dict(),
             'identityfile': dict()
         })
         Farmer(self.test_args)
     self.assertEqual(
         str(ex.exception),
         'Must specify farming address if one is not available.')
示例#17
0
 def test_prepare_chunk_fail(self):
     with mock.patch('downstream_farmer.farmer.restore', autospec=True) as r,\
             mock.patch('six.moves.urllib.request.urlopen'),\
             mock.patch('downstream_farmer.farmer.os') as os_patch:
         r.side_effect = MockRestore({
             'historyfile': dict(),
             'identityfile': dict()
         })
         os_patch.path.isdir.return_value = False
         os_patch.mkdir.side_effect = RuntimeError('test exception')
         with self.assertRaises(DownstreamError) as ex:
             Farmer(self.test_args)
         self.assertEqual(
             str(ex.exception),
             'Chunk directory could not be created: test exception')
示例#18
0
 def test_load_signature_none(self):
     with mock.patch('downstream_farmer.farmer.restore', autospec=True) as r,\
             mock.patch.object(Farmer, 'check_connectivity'):
         r.side_effect = MockRestore({
             'historyfile': dict(),
             'identityfile': {
                 'identityaddress': {
                     'signature': 'testsig',
                     'message': 'testmessage'
                 }
             }
         })
         farmer = Farmer(self.test_args)
         self.assertEqual(farmer.message, '')
         self.assertEqual(farmer.signature, '')
示例#19
0
 def test_init_address_from_state(self):
     self.test_args.address = None
     with mock.patch('downstream_farmer.farmer.restore', autospec=True) as r,\
             mock.patch.object(Farmer, 'check_connectivity'):
         r.side_effect = MockRestore({
             'historyfile': {
                 'nodes': {
                     self.test_args.node_url.strip('/'): {
                         'token': 'statetoken',
                         'address': 'stateaddress'
                     }
                 }
             },
             'identityfile': dict()
         })
         farmer = Farmer(self.test_args)
         self.assertEqual(farmer.address, 'stateaddress')
示例#20
0
    def test_check_connectivity(self):
        with mock.patch('downstream_farmer.farmer.restore', autospec=True) as r,\
                mock.patch('six.moves.urllib.request.urlopen') as patch:
            r.side_effect = MockRestore({
                'historyfile': dict(),
                'identityfile': dict()
            })
            farmer = Farmer(self.test_args)
            patch.side_effect = URLError('Problem')
            with self.assertRaises(DownstreamError):
                farmer.check_connectivity()

        with mock.patch('six.moves.urllib.request.urlopen') as patch:
            farmer.check_connectivity()
            self.assertTrue(patch.called)
示例#21
0
 def test_init_address_from_identities(self):
     self.test_args.address = None
     with mock.patch('downstream_farmer.farmer.restore', autospec=True) as r,\
             mock.patch.object(Farmer, 'check_connectivity'):
         r.side_effect = MockRestore({
             'historyfile': dict(),
             'identityfile': {
                 '19qVgG8C6eXwKMMyvVegsi3xCsKyk3Z3jV': {
                     'signature':
                     'HyzVUenXXo4pa+kgm1v'
                     'S8PNJM83eIXFC5r0q86FGbqFcdla6rcw'
                     '72/ciXiEPfjli3ENfwWuESHhv6K9esI0'
                     'dl5I=',
                     'message':
                     'test message'
                 }
             }
         })
         farmer = Farmer(self.test_args)
         self.assertEqual(farmer.address,
                          '19qVgG8C6eXwKMMyvVegsi3xCsKyk3Z3jV')
示例#22
0
 def test_load_signature_invalid_sig(self):
     self.test_args.token = None
     self.test_args.address = None
     with mock.patch('downstream_farmer.farmer.restore', autospec=True) as r,\
             mock.patch.object(Farmer, 'check_connectivity'),\
             mock.patch('siggy.verify_signature') as s:
         s.return_value = False
         r.side_effect = MockRestore({
             'historyfile': dict(),
             'identityfile': {
                 'identityaddress': {
                     'signature': 'testsig',
                     'message': 'testmessage'
                 }
             }
         })
         with self.assertRaises(DownstreamError) as ex:
             Farmer(self.test_args)
         self.assertEqual(
             str(ex.exception), 'Signature provided does not'
             ' match address being used. '
             'Check your formatting, your SJCX address, and'
             ' try again.')
示例#23
0
 def test_init_size_invalid(self):
     self.test_args.size = 0
     with self.assertRaises(DownstreamError) as ex:
         Farmer(self.test_args)
     self.assertEqual(str(ex.exception),
                      'Must specify a positive size to farm.')
示例#24
0
 def test_init_number_invalid(self):
     self.test_args.number = -1
     with self.assertRaises(DownstreamError) as ex:
         Farmer(self.test_args)
     self.assertEqual(str(ex.exception),
                      'Must specify a positive number of challenges.')