예제 #1
0
    def test_room_ready(self):
        client1 = WSClient()
        client1.login(username='******', password='******')
        client1.send_and_consume('websocket.connect', path='/api/websocket/')
        client1.receive()

        client2 = WSClient()
        client2.login(username='******', password='******')
        client2.send_and_consume('websocket.connect', path='/api/websocket/')
        client2.receive()

        data = {
            'room_id': 'room',
        }

        req = request('room-join', data, nonce='test')

        client1.send_and_consume('websocket.receive', req, path='/api/websocket/')

        room_join_consumer(self.get_next_message('room-join'))

        client1.receive()
        client1.receive()

        client2.send_and_consume('websocket.receive', req, path='/api/websocket/')

        room_join_consumer(self.get_next_message('room-join'))

        client2.receive()
        client2.receive()
        client1.receive()

        req = request('room-ready', {'ready': True}, nonce='test')
        client1.send_and_consume('websocket.receive', req, path='/api/websocket/')

        room_ready_consumer(self.get_next_message('room-ready'))
        room_cache = cache.get('room:room')

        response = client1.receive()

        self.assertTrue(response['success'])
        self.assertTrue(room_cache['players'][0]['ready'])
        self.assertFalse(room_cache['players'][1]['ready'])

        client1.receive()
        response = client2.receive()

        self.assertEqual(response['event'], 'room-ready')
        self.assertEqual(response['data']['player'], 'skystar1')

        req = request('room-ready', {'ready': False}, nonce='test')
        client1.send_and_consume('websocket.receive', req, path='/api/websocket/')

        room_ready_consumer(self.get_next_message('room-ready'))
        room_cache = cache.get('room:room')

        response = client1.receive()

        self.assertTrue(response['success'])
        self.assertFalse(room_cache['players'][0]['ready'])
예제 #2
0
    def test_room_join_with_password(self):
        client = WSClient()
        client.login(username='******', password='******')
        client.send_and_consume('websocket.connect', path='/api/websocket/')
        client.receive()

        data = {'room_id': 'room2', 'password': '******'}

        req = request('room-join', data, nonce='test')

        client.send_and_consume('websocket.receive',
                                req,
                                path='/api/websocket/')

        room_join_consumer(self.get_next_message('room-join'))

        response = client.receive()

        room_cache = cache.get('room:room2')
        player_room_cache = cache.get('player-room:skystar1')

        self.assertTrue(response['success'])

        result = response['result']

        self.assertEqual(result['room_id'], 'room2')
        self.assertEqual(result['room_id'], player_room_cache)
        self.assertEqual(len(room_cache['players']), 1)
        self.assertEqual(room_cache['players'][0]['username'], 'skystar1')
예제 #3
0
    def test_room_join_with_wrong_room_id(self):
        client = WSClient()
        client.login(username='******', password='******')
        client.send_and_consume('websocket.connect', path='/api/websocket/')
        client.receive()

        data = {
            'room_id': 'room3',
        }

        req = request('room-join', data, nonce='test')

        client.send_and_consume('websocket.receive',
                                req,
                                path='/api/websocket/')

        room_join_consumer(self.get_next_message('room-join'))

        response = client.receive()

        player_room_cache = cache.get('player-room:skystar1')

        self.assertFalse(response['success'])
        self.assertEqual(response['error']['reason'], 'Room does not exist')
        self.assertIsNone(player_room_cache)
예제 #4
0
    def test_room_join_broadcast(self):
        client1 = WSClient()
        client1.login(username='******', password='******')
        client1.send_and_consume('websocket.connect', path='/api/websocket/')
        client2 = WSClient()
        client2.login(username='******', password='******')
        client2.send_and_consume('websocket.connect', path='/api/websocket/')
        client3 = WSClient()
        client3.login(username='******', password='******')
        client3.send_and_consume('websocket.connect', path='/api/websocket/')
        client1.receive()
        client2.receive()
        client3.receive()

        data = {
            'room_id': 'room',
        }

        req = request('room-join', data, nonce='test')

        client1.send_and_consume('websocket.receive',
                                 req,
                                 path='/api/websocket/')
        room_join_consumer(self.get_next_message('room-join'))
        client1.receive()

        self.assertEqual(client1.receive()['data']['player'], 'skystar1')

        client2.send_and_consume('websocket.receive',
                                 req,
                                 path='/api/websocket/')
        room_join_consumer(self.get_next_message('room-join'))

        self.assertEqual(len(client2.receive()['result']['players']), 2)

        response = client1.receive()

        room_cache = cache.get('room:room')

        self.assertIn('event', response)
        self.assertEqual(response['event'], 'room-join')

        result = response['data']

        self.assertEqual(len(room_cache['players']), 2)
        self.assertEqual(room_cache['players'][0]['username'], 'skystar1')
        self.assertEqual(room_cache['players'][1]['username'], 'skystar2')

        self.assertEqual(result['player'], 'skystar2')

        client3.send_and_consume('websocket.receive',
                                 req,
                                 path='/api/websocket/')
        room_join_consumer(self.get_next_message('room-join'))

        response = client3.receive()
        self.assertFalse(response['success'])
        self.assertEqual(response['error']['reason'], 'Room is full')
예제 #5
0
    def test_room_ai(self):
        client = WSClient()
        client.login(username='******', password='******')
        client.send_and_consume('websocket.connect', path='/api/websocket/')
        client.receive()

        data = {
            'room_id': 'test',
        }
        req = request('room-join', data, nonce='test')
        client.send_and_consume('websocket.receive', req, path='/api/websocket/')

        client.consume('room-join')
        client.receive()
        client.receive()

        nick = ['doge', 'bitcoin', 'ethereum', 'egger']
        for i in range(4):
            req = request('room-ai-add', {}, nonce='test')
            client.send_and_consume('websocket.receive', req, path='/api/websocket/')

            client.consume('room-ai-add')
            client.receive()
            response = client.receive()
            self.assertEqual(response['event'], 'room-join')
            self.assertEqual(response['data']['player'], '*AI-' + nick[i])
            client.receive()

        data = {
            'ai_name': '*AI-ethereum',
        }
        req = request('room-ai-delete', data, nonce='test')
        client.send_and_consume('websocket.receive', req, path='/api/websocket/')
        client.consume('room-ai-delete')
        client.receive()
        response = client.receive()
        self.assertEqual(response['event'], 'room-leave')
        self.assertEqual(response['data']['player'], '*AI-ethereum')
예제 #6
0
    def test_room_reset(self):
        client1 = WSClient()
        client1.login(username='******', password='******')
        client1.send_and_consume('websocket.connect', path='/api/websocket/')
        client1.receive()

        client2 = WSClient()
        client2.login(username='******', password='******')
        client2.send_and_consume('websocket.connect', path='/api/websocket/')
        client2.receive()

        data = {
            'room_id': 'room',
        }

        req = request('room-join', data, nonce='test')

        client1.send_and_consume('websocket.receive',
                                 req,
                                 path='/api/websocket/')

        room_join_consumer(self.get_next_message('room-join'))

        client1.receive()
        client1.receive()

        req = request('room-join', data, nonce='test')
        client2.send_and_consume('websocket.receive',
                                 req,
                                 path='/api/websocket/')

        room_join_consumer(self.get_next_message('room-join'))

        client2.receive()
        client2.receive()
        client1.receive()

        room_cache = cache.get('room:room')
        room_cache['game']['state'] = RoomState.PLAYING
        cache.set('room:room', room_cache)

        req = request('room-leave', {}, nonce='test')
        client2.send_and_consume('websocket.receive',
                                 req,
                                 path='/api/websocket/')

        room_leave_consumer(self.get_next_message('room-leave'))

        response = client1.receive()

        self.assertEqual(response['event'], 'room-leave')
        self.assertEqual(response['data']['player'], 'skystar2')

        room_reset_consumer(self.get_next_message('room-reset'))

        response = client1.receive()

        self.assertEqual(response['event'], 'room-reset')
        players = response['data']['players']
        self.assertEqual(players[0]['username'], 'skystar1')

        room_cache = cache.get('room:room')

        new_room_data_ = reset_room_data(room_cache)

        self.assertEqual(room_cache, new_room_data_)
예제 #7
0
    def test_room_start(self):
        client1 = WSClient()
        client1.login(username='******', password='******')
        client1.send_and_consume('websocket.connect', path='/api/websocket/')
        client1.receive()

        client2 = WSClient()
        client2.login(username='******', password='******')
        client2.send_and_consume('websocket.connect', path='/api/websocket/')
        client2.receive()

        data = {
            'room_id': 'room',
        }

        req = request('room-join', data, nonce='test')

        client1.send_and_consume('websocket.receive',
                                 req,
                                 path='/api/websocket/')

        room_join_consumer(self.get_next_message('room-join'))

        client1.receive()
        client1.receive()

        req = request('room-ready', {'ready': True}, nonce='test')
        client1.send_and_consume('websocket.receive',
                                 req,
                                 path='/api/websocket/')

        room_ready_consumer(self.get_next_message('room-ready'))

        client1.receive()
        client1.receive()

        req = request('room-start', {}, nonce='test')
        client1.send_and_consume('websocket.receive',
                                 req,
                                 path='/api/websocket/')

        room_start_consumer(self.get_next_message('room-start'))

        response = client1.receive()

        self.assertFalse(response['success'])
        self.assertEqual(response['error']['reason'], 'Not enough players')

        req = request('room-join', data, nonce='test')
        client2.send_and_consume('websocket.receive',
                                 req,
                                 path='/api/websocket/')

        room_join_consumer(self.get_next_message('room-join'))

        client2.receive()
        client2.receive()
        client1.receive()

        req = request('room-ready', {'ready': True}, nonce='test')
        client2.send_and_consume('websocket.receive',
                                 req,
                                 path='/api/websocket/')

        room_ready_consumer(self.get_next_message('room-ready'))

        client2.receive()
        client2.receive()
        client1.receive()

        req = request('room-start', {}, nonce='test')
        client2.send_and_consume('websocket.receive',
                                 req,
                                 path='/api/websocket/')

        room_start_consumer(self.get_next_message('room-start'))

        response = client2.receive()

        self.assertFalse(response['success'])
        self.assertEqual(response['error']['reason'], 'You are not host')

        room_cache = cache.get('room:room')

        self.assertIs(room_cache['game']['state'], RoomState.NOT_PLAYING)

        req = request('room-start', {}, nonce='test')
        client1.send_and_consume('websocket.receive',
                                 req,
                                 path='/api/websocket/')

        room_start_consumer(self.get_next_message('room-start'))

        response = client1.receive()
        self.assertTrue(response['success'])

        response = client1.receive()
        self.assertEqual(response['event'], 'room-start')

        response = client2.receive()
        self.assertEqual(response['event'], 'room-start')
예제 #8
0
    def test_room_leave(self):
        client1 = WSClient()
        client1.login(username='******', password='******')
        client1.send_and_consume('websocket.connect', path='/api/websocket/')
        client1.receive()

        client2 = WSClient()
        client2.login(username='******', password='******')
        client2.send_and_consume('websocket.connect', path='/api/websocket/')
        client2.receive()

        client3 = WSClient()
        client3.login(username='******', password='******')
        client3.send_and_consume('websocket.connect', path='/api/websocket/')
        client3.receive()

        data = {
            'room_id': 'room',
        }

        req = request('room-join', data, nonce='test')

        client1.send_and_consume('websocket.receive',
                                 req,
                                 path='/api/websocket/')

        room_join_consumer(self.get_next_message('room-join'))

        client1.receive()
        client1.receive()

        client2.send_and_consume('websocket.receive',
                                 req,
                                 path='/api/websocket/')

        room_join_consumer(self.get_next_message('room-join'))

        client2.receive()
        client2.receive()
        client1.receive()

        client3.send_and_consume('websocket.receive',
                                 req,
                                 path='/api/websocket/')

        room_join_consumer(self.get_next_message('room-join'))

        client3.receive()
        client3.receive()
        client1.receive()
        client2.receive()

        req = request('room-leave', {}, nonce='test')
        client1.send_and_consume('websocket.receive',
                                 req,
                                 path='/api/websocket/')

        room_leave_consumer(self.get_next_message('room-leave'))

        response = client1.receive()

        self.assertTrue(response['success'])
        self.assertEqual(response['result'], {})

        player_room_cache = cache.get('player-room:skystar1')
        self.assertIsNone(player_room_cache)

        room_cache = cache.get('room:room')
        self.assertEqual(len(room_cache['players']), 2)

        response = client2.receive()
        client3.receive()

        self.assertEqual(response['event'], 'room-leave')
        self.assertEqual(response['data']['player'], 'skystar1')
        self.assertEqual(room_cache['players'][0]['username'], 'skystar2')
        self.assertIsNotNone(cache.get('session:skystar1'))
        self.assertIsNone(cache.get('player-room:skystar1'))

        client2.send_and_consume('websocket.disconnect', {'code': 1000},
                                 path='/api/websocket')

        room_leave_consumer(self.get_next_message('room-leave'))

        room_cache = cache.get('room:room')

        response = client3.receive()

        self.assertEqual(response['event'], 'room-leave')
        self.assertEqual(response['data']['player'], 'skystar2')
        self.assertEqual(room_cache['players'][0]['username'], 'skystar3')
        self.assertIsNone(cache.get('session:skystar2'))
        self.assertIsNone(cache.get('player-room:skystar2'))

        req = request('room-leave', {}, nonce='test')
        client3.send_and_consume('websocket.receive',
                                 req,
                                 path='/api/websocket/')

        room_leave_consumer(self.get_next_message('room-leave'))

        room_cache = cache.get('room:room')

        self.assertIsNone(room_cache)
        self.assertFalse(Room.objects.filter(room_id='room').exists())