def test_session_stats_create_without_session_record_with_unknown_ip(self): payload = { 'bytes_sent': 20, 'bytes_received': 40, 'provider_id': '0x1', } auth = generate_test_authorization(json.dumps(payload)) re = self._post( '/v1/sessions/123/stats', payload, headers=auth['headers'], remote_addr='127.0.0.1', ) self.assertEqual(200, re.status_code) self.assertEqual({}, re.json) session = Session.query.get('123') self.assertEqual(20, session.client_bytes_sent) self.assertEqual(40, session.client_bytes_received) self.assertIsNotNone(session.client_updated_at) self.assertEqual(auth['public_address'], session.consumer_id) self.assertEqual('127.0.0.X', session.client_ip) self.assertEqual('', session.client_country) self.assertEqual('0x1', session.node_key)
def test_session_stats_create_successful(self): payload = { 'bytes_sent': 20, 'bytes_received': 40, 'provider_id': '0x1', } auth = generate_test_authorization(json.dumps(payload)) session = Session('123') session.consumer_id = auth['public_address'] db.session.add(session) db.session.commit() re = self._post( '/v1/sessions/123/stats', payload, headers=auth['headers'], ) self.assertEqual(200, re.status_code) self.assertEqual({}, re.json) session = Session.query.get('123') self.assertEqual(20, session.client_bytes_sent) self.assertEqual(40, session.client_bytes_received) self.assertIsNotNone(session.client_updated_at) self.assertIsNone(session.node_key)
def test_session_stats_create_with_negative_values(self): auth = generate_test_authorization() re = self._post('/v1/sessions/123/stats', { 'bytes_sent': -20, 'bytes_received': 40, 'provider_id': '0x1', }, headers=auth['headers']) self.assertEqual(400, re.status_code) self.assertEqual( {'error': 'bytes_sent missing or value is not unsigned int'}, re.json) re = self._post('/v1/sessions/123/stats', { 'bytes_sent': 20, 'bytes_received': -40, 'provider_id': '0x1', }, headers=auth['headers']) self.assertEqual(400, re.status_code) self.assertEqual( {'error': 'bytes_received missing or value is not unsigned int'}, re.json) sessions = Session.query.all() self.assertEqual(0, len(sessions))
def test_successful(self): auth = generate_test_authorization() re = self.client.post('/v1/identities', headers=auth['headers']) self.assertEqual(200, re.status_code) self.assertEqual({}, re.json) identity_record = Identity.query.get(auth['public_address']) self.assertIsNotNone(identity_record)
def test_ping_proposal(self): payload = {} auth = generate_test_authorization(json.dumps(payload)) self._create_node(auth['public_address']) re = self._post('/v1/ping_proposal', payload, headers=auth['headers']) self.assertEqual(200, re.status_code) self.assertEqual({}, re.json)
def test_node_send_stats_with_unknown_node(self): payload = {} auth = generate_test_authorization(json.dumps(payload)) re = self._post('/v1/node_send_stats', payload, headers=auth['headers']) self.assertEqual(400, re.status_code) self.assertEqual({'error': 'node key not found'}, re.json)
def test_failure_identity_already_exists(self): auth = generate_test_authorization() identity_record = Identity(auth['public_address']) db.session.add(identity_record) re = self.client.post('/v1/identities', headers=auth['headers']) self.assertEqual(403, re.status_code) self.assertEqual({"error": 'identity already exists'}, re.json)
def test_unregister_proposal_missing_provider(self): # unregister payload = {} auth = generate_test_authorization(json.dumps(payload)) re = self._post('/v1/unregister_proposal', payload, headers=auth['headers']) self.assertEqual(400, re.status_code) self.assertEqual({"error": 'missing provider_id'}, re.json)
def test_unregister_proposal_unauthorized(self): payload = {"provider_id": "incorrect"} auth = generate_test_authorization(json.dumps(payload)) re = self._post('/v1/unregister_proposal', payload, headers=auth['headers']) self.assertEqual(403, re.status_code) self.assertIsNotNone(re.json) self.assertEqual( {'error': 'provider_id does not match current identity'}, re.json)
def test_node_reg_successful(self): public_address = generate_static_public_address() payload = { "service_proposal": { "id": 1, "format": "service-proposal/v1", "provider_id": public_address, } } auth = generate_test_authorization(json.dumps(payload)) re = self._post('/v1/node_register', payload, headers=auth['headers']) self.assertEqual(200, re.status_code) re.json
def test_unregister_proposal_successful(self): public_address = generate_static_public_address() node = self._create_node(public_address) node.mark_activity() self.assertTrue(node.is_active()) # unregister payload = {"provider_id": public_address} auth = generate_test_authorization(json.dumps(payload)) re = self._post('/v1/unregister_proposal', payload, headers=auth['headers']) self.assertEqual(200, re.status_code) self.assertIsNotNone(re.json) self.assertFalse(node.is_active())
def test_node_reg_unauthorized(self): payload = { "service_proposal": { "id": 1, "format": "service-proposal/v1", "provider_id": "incorrect", } } auth = generate_test_authorization(json.dumps(payload)) re = self._post('/v1/node_register', payload, headers=auth['headers']) self.assertEqual(403, re.status_code) self.assertEqual( {'error': 'provider_id does not match current identity'}, re.json) re.json
def test_session_stats_without_session_record_and_consumer_country(self): payload = { 'bytes_sent': 20, 'bytes_received': 40, 'provider_id': '0x1', } auth = generate_test_authorization(json.dumps(payload)) re = self._post( '/v1/sessions/123/stats', payload, headers=auth['headers'], ) self.assertEqual(200, re.status_code) self.assertEqual({}, re.json) session = Session.query.get('123') self.assertEqual('', session.client_country)
def test_session_stats_without_provider_id(self): payload = { 'bytes_sent': 20, 'bytes_received': 40, } auth = generate_test_authorization(json.dumps(payload)) re = self._post( '/v1/sessions/123/stats', payload, headers=auth['headers'], ) self.assertEqual(400, re.status_code) self.assertEqual({'error': 'provider_id missing'}, re.json) session = Session.query.get('123') self.assertIsNone(session)
def test_restrict_by_ip_fail(self): payload = {} auth = generate_test_authorization(json.dumps(payload)) self._create_node(auth['public_address']) ips = [ '1.1.1.1', '2.2.2.2', ] with setting('RESTRICT_BY_IP_ENABLED', True), \ setting('ALLOWED_IP_ADDRESSES', ips): re = self._post('/v1/ping_proposal', payload, headers=auth['headers']) self.assertEqual(403, re.status_code) self.assertEqual({'error': 'resource is forbidden'}, re.json)
def test_register_proposal_successful(self): public_address = generate_static_public_address() payload = { "service_proposal": { "id": 1, "format": "service-proposal/v1", "provider_id": public_address, } } auth = generate_test_authorization(json.dumps(payload)) re = self._post('/v1/register_proposal', payload, headers=auth['headers']) self.assertEqual(200, re.status_code) self.assertIsNotNone(re.json) node = Node.query.get(public_address) self.assertEqual(self.REMOTE_ADDR, node.ip)
def test_session_stats_without_bytes_received(self): payload = { 'bytes_sent': 20, 'provider_id': '0x1', } auth = generate_test_authorization(json.dumps(payload)) re = self._post( '/v1/sessions/123/stats', payload, headers=auth['headers'], ) self.assertEqual(400, re.status_code) self.assertEqual( {'error': 'bytes_received missing or value is not unsigned int'}, re.json) sessions = Session.query.all() self.assertEqual(0, len(sessions))
def test_register_proposal_with_unknown_ip(self): public_address = generate_static_public_address() payload = { "service_proposal": { "id": 1, "format": "service-proposal/v1", "provider_id": public_address, } } auth = generate_test_authorization(json.dumps(payload)) re = self._post('/v1/register_proposal', payload, headers=auth['headers'], remote_addr='127.0.0.1') self.assertEqual(200, re.status_code) self.assertIsNotNone(re.json) node = Node.query.get(public_address) self.assertEqual('127.0.0.1', node.ip)
def test_session_stats_create_with_negative_values(self): auth = generate_test_authorization() re = self._post('/v1/sessions/123/stats', { 'bytes_sent': -20, 'bytes_received': 40 }, headers=auth['headers']) self.assertEqual(400, re.status_code) self.assertEqual({'error': 'bytes_sent should not be negative'}, re.json) re = self._post('/v1/sessions/123/stats', { 'bytes_sent': 20, 'bytes_received': -40 }, headers=auth['headers']) self.assertEqual(400, re.status_code) self.assertEqual({'error': 'bytes_received should not be negative'}, re.json) sessions = Session.query.all() self.assertEqual(0, len(sessions))
def test_session_stats_create_with_different_consumer_id(self): session = Session('123') session.consumer_id = 'different' db.session.add(session) db.session.commit() payload = { 'bytes_sent': 20, 'bytes_received': 40, } auth = generate_test_authorization(json.dumps(payload)) re = self._post( '/v1/sessions/123/stats', payload, headers=auth['headers'], ) self.assertEqual(403, re.status_code) self.assertEqual( {'error': 'session identity does not match current one'}, re.json) session = Session.query.get('123') self.assertEqual(0, session.client_bytes_sent)
def test_successful_request(self): auth = generate_test_authorization() re = self.client.get('/v1/me', headers=auth['headers']) self.assertEqual(200, re.status_code) self.assertEqual(re.json, {'identity': auth['public_address']})