Esempio n. 1
0
	def init_game(self):
		screen_size = self.video_driver.getScreenSize()
		self.brick_width = abs(screen_size.X / 11)
		self.brick_height = abs(screen_size.X / 32)
		self.paddle_width = 60
		self.paddle_height = 12
		self.max_paddle_x = screen_size.X - self.paddle_width
		self.max_ball_x = screen_size.X - BALL_DIAMETER
		self.max_ball_y = screen_size.Y - BALL_DIAMETER
		# Paddle X,Y coordinate
		self.paddle_x = (screen_size.X - self.paddle_width) / 2
		self.paddle_y = screen_size.Y - self.paddle_height - 10
		# ball X,Y coordinate
		self.ball_x = self.paddle_x
		self.ball_y = self.paddle_y - BALL_DIAMETER
		self.lives = 3
		self.score = 0
		self.state = STATE_BALL_IN_PADDLE
		self.paddle = recti(self.paddle_x, self.paddle_y, self.paddle_x + self.paddle_width, self.paddle_y + self.paddle_height)
		self.ball = recti(self.ball_x, self.ball_y, self.ball_x + BALL_DIAMETER, self.ball_y + BALL_DIAMETER)
		self.ball_vel = self.ball_vel_default
		#~ self.ball3d.setPosition(vector3df(self.ball_x, self.ball_y, 0))
		# cellular texture generator
		self.cell_paddle = Cellular(self.video_driver, self.paddle_width, self.paddle_height, 128)
		self.cell_brick = Cellular(self.video_driver, self.brick_width, self.brick_height, 128)
		if not self.texture_paddle:
			self.texture_paddle = self.cell_paddle.get_texture()
		else:
			self.texture_paddle = self.cell_paddle.get_new_texture(cellSize = 8, density = 4.0, rand_range_count = 25)
		if not self.texture_brick:
			self.texture_brick = self.cell_brick.get_texture()
		else:
			self.texture_brick = self.cell_brick.get_new_texture(mFact = .5, lPower = .5)
		self.create_bricks()
 def test_get_status_by_id_connect(self):
     self.cellular = Cellular(connection=Mockup())
     with patch("cellular.subprocess") as subprocess:
         subprocess.check_output.return_value =\
             "Connection status: 'connected'"
         subprocess.call.return_value = True
         res = self.cellular.get_status_by_id(0)
         self.assertEqual(res, 1)
 def test_get_status_by_id_search_fail(self):
     self.cellular = Cellular(connection=Mockup())
     with patch("cellular.subprocess") as subprocess:
         subprocess.check_output.return_value =\
             "xxxx"
         subprocess.call.return_value = None
         res = self.cellular.get_status_by_id(0)
         self.assertEqual(res, 2)
 def test_get_status_by_id_with_no_cid(self):
     self.cellular = Cellular(connection=Mockup())
     with patch("cellular.subprocess") as subprocess:
         self.cellular.cid = "1234"
         subprocess.check_output.return_value = True
         subprocess.call.return_value = True
         res = self.cellular.get_status_by_id(0)
         self.assertEqual(res, 2)
 def setUp(self, set_pincode_by_id):
     sh.echo("1234, 1234", _out="/run/shm/cellular.tmp")
     try:
         os.unlink(dirpath + "/../data/cellular.json")
     except Exception:
         pass
     set_pincode_by_id.return_value = True
     self.cellular = Cellular(connection=Mockup())
 def test_set_offline_by_id_with_no_cid(self):
     self.cellular = Cellular(connection=Mockup())
     with patch("cellular.subprocess") as subprocess:
         subprocess.check_output.return_value = True
         self.cellular.cid = ""
         self.cellular.pdh = ""
         res = self.cellular.set_offline_by_id(0)
         self.assertEqual(res, True)
class TestCellularPinCodeById(unittest.TestCase):
    def setUp(self):
        self.cellular = Cellular(connection=Mockup())

    def tearDown(self):
        self.cellular = None

    def test_set_pincode_by_id(self):
        self.cellular.model.db = [{
            'pinCode': '0000',
            'id': 0,
            'atPort': '/dev/ttyS0',
            'modemPort': '/dev/ttyS0'
        }]
        with patch("cellular.subprocess") as subprocess:
            subprocess.check_output.return_value = True
            res = self.cellular.set_pincode_by_id(0, '0000')
            self.assertTrue(res)

    def test_set_pincode_by_id_empty(self):
        self.cellular.model.db = [{
            'pinCode': '',
            'id': 0,
            'atPort': '/dev/ttyS0',
            'modemPort': '/dev/ttyS0'
        }]
        with patch("cellular.subprocess") as subprocess:
            subprocess.check_output.return_value = True
            res = self.cellular.set_pincode_by_id(0, '')
            self.assertTrue(res)

    def test_put_cases(self):
        test_msg = {
            "id": 12345,
            "method": "put",
            "param": {
                "id": 1
            },
            "resource": "/network/cellulars"
        }

        def test_pincode_with_invalid_data(code=400, data=None):
            self.assertEqual(400, code)
            self.assertEqual(data, {"message": "PIN invalid."})

        test_msg["data"] = {"pinCode": "000000"}
        message = Message(test_msg)
        self.cellular.\
            put_root_by_id(message,
                           response=test_pincode_with_invalid_data,
                           test=True)
 def test_get_status_by_id_connect(self):
     self.cellular = Cellular(connection=Mockup())
     with patch("cellular.subprocess") as subprocess:
         subprocess.check_output.return_value =\
             "Connection status: 'connected'"
         subprocess.call.return_value = True
         res = self.cellular.get_status_by_id(0)
         self.assertEqual(res, 1)
 def test_get_status_by_id_search_fail(self):
     self.cellular = Cellular(connection=Mockup())
     with patch("cellular.subprocess") as subprocess:
         subprocess.check_output.return_value =\
             "xxxx"
         subprocess.call.return_value = None
         res = self.cellular.get_status_by_id(0)
         self.assertEqual(res, 2)
 def setUp(self, set_pincode_by_id):
     sh.echo("1234, 1234", _out="/run/shm/cellular.tmp")
     try:
         os.unlink(dirpath + "/../data/cellular.json")
     except Exception:
         pass
     set_pincode_by_id.return_value = True
     self.cellular = Cellular(connection=Mockup())
 def test_get_status_by_id_with_no_cid(self):
     self.cellular = Cellular(connection=Mockup())
     with patch("cellular.subprocess") as subprocess:
         self.cellular.cid = "1234"
         subprocess.check_output.return_value = True
         subprocess.call.return_value = True
         res = self.cellular.get_status_by_id(0)
         self.assertEqual(res, 2)
 def test_set_offline_by_id_with_no_cid(self):
     self.cellular = Cellular(connection=Mockup())
     with patch("cellular.subprocess") as subprocess:
         subprocess.check_output.return_value = True
         self.cellular.cid = ""
         self.cellular.pdh = ""
         res = self.cellular.set_offline_by_id(0)
         self.assertEqual(res, True)
class TestCellularPinCodeById(unittest.TestCase):

    def setUp(self):
        self.cellular = Cellular(connection=Mockup())

    def tearDown(self):
        self.cellular = None

    def test_set_pincode_by_id(self):
        self.cellular.model.db = [{'pinCode': '0000',
                                   'id': 0,
                                   'atPort': '/dev/ttyS0',
                                   'modemPort': '/dev/ttyS0'}]
        with patch("cellular.subprocess") as subprocess:
            subprocess.check_output.return_value = True
            res = self.cellular.set_pincode_by_id(0, '0000')
            self.assertTrue(res)

    def test_set_pincode_by_id_empty(self):
        self.cellular.model.db = [{'pinCode': '',
                                   'id': 0,
                                   'atPort': '/dev/ttyS0',
                                   'modemPort': '/dev/ttyS0'}]
        with patch("cellular.subprocess") as subprocess:
            subprocess.check_output.return_value = True
            res = self.cellular.set_pincode_by_id(0, '')
            self.assertTrue(res)

    def test_put_cases(self):
        test_msg = {
            "id": 12345,
            "method": "put",
            "param": {"id": 1},
            "resource": "/network/cellulars"
        }

        def test_pincode_with_invalid_data(code=400, data=None):
            self.assertEqual(400, code)
            self.assertEqual(data, {"message": "PIN invalid."})
        test_msg["data"] = {"pinCode": "000000"}
        message = Message(test_msg)
        self.cellular.\
            put_root_by_id(message,
                           response=test_pincode_with_invalid_data,
                           test=True)
Esempio n. 14
0
 def init_game(self):
     screen_size = self.video_driver.getScreenSize()
     self.brick_width = abs(screen_size.X / 11)
     self.brick_height = abs(screen_size.X / 32)
     self.paddle_width = 60
     self.paddle_height = 12
     self.max_paddle_x = screen_size.X - self.paddle_width
     self.max_ball_x = screen_size.X - BALL_DIAMETER
     self.max_ball_y = screen_size.Y - BALL_DIAMETER
     # Paddle X,Y coordinate
     self.paddle_x = (screen_size.X - self.paddle_width) / 2
     self.paddle_y = screen_size.Y - self.paddle_height - 10
     # ball X,Y coordinate
     self.ball_x = self.paddle_x
     self.ball_y = self.paddle_y - BALL_DIAMETER
     self.lives = 3
     self.score = 0
     self.state = STATE_BALL_IN_PADDLE
     self.paddle = recti(self.paddle_x, self.paddle_y,
                         self.paddle_x + self.paddle_width,
                         self.paddle_y + self.paddle_height)
     self.ball = recti(self.ball_x, self.ball_y,
                       self.ball_x + BALL_DIAMETER,
                       self.ball_y + BALL_DIAMETER)
     self.ball_vel = self.ball_vel_default
     #~ self.ball3d.setPosition(vector3df(self.ball_x, self.ball_y, 0))
     # cellular texture generator
     self.cell_paddle = Cellular(self.video_driver, self.paddle_width,
                                 self.paddle_height, 128)
     self.cell_brick = Cellular(self.video_driver, self.brick_width,
                                self.brick_height, 128)
     if not self.texture_paddle:
         self.texture_paddle = self.cell_paddle.get_texture()
     else:
         self.texture_paddle = self.cell_paddle.get_new_texture(
             cellSize=8, density=4.0, rand_range_count=25)
     if not self.texture_brick:
         self.texture_brick = self.cell_brick.get_texture()
     else:
         self.texture_brick = self.cell_brick.get_new_texture(mFact=.5,
                                                              lPower=.5)
     self.create_bricks()
Esempio n. 15
0
 def testCountAliveNeighbours(self):
     cellular = Cellular((3, 3)).initialize(100)
     self.assertEqual(cellular.countLiveNeighbours((0, 0)), 3)
     self.assertEqual(cellular.countLiveNeighbours((1, 0)), 5)
     self.assertEqual(cellular.countLiveNeighbours((2, 0)), 3)
     self.assertEqual(cellular.countLiveNeighbours((0, 1)), 5)
     self.assertEqual(cellular.countLiveNeighbours((1, 1)), 8)
     self.assertEqual(cellular.countLiveNeighbours((2, 1)), 5)
     self.assertEqual(cellular.countLiveNeighbours((0, 2)), 3)
     self.assertEqual(cellular.countLiveNeighbours((1, 2)), 5)
     self.assertEqual(cellular.countLiveNeighbours((2, 2)), 3)
    def test_set_online_by_id(self):
        self.cellular = Cellular(connection=Mockup())
        self.cellular.model.db = [{
            'enable': 1,
            'name': 'wwan1',
            'modemPort': '/dev/ttyS0',
            'id': 0,
            'atPort': '/dev/ttyS0',
            'enableAuth': 1,
            'apn': 'internet',
            'authType': 'PAP',
            'username': '******',
            'password': '******'
        }]
        self.cellular.check_dhclient = Mock()
        with patch("cellular.subprocess") as subprocess:
            subprocess.check_output.\
                return_value = "\
                                Packet data handle: '123'\
                                CID: '23'"

            self.cellular.cid = "1234"
            res = self.cellular.set_online_by_id(0)
            self.assertEqual(res, True)
 def test_set_online_by_id(self):
     self.cellular = Cellular(connection=Mockup())
     self.cellular.model.db = [{'enable': 1,
                                'name': 'wwan1',
                                'modemPort': '/dev/ttyS0', 'id': 0,
                                'atPort': '/dev/ttyS0',
                                'enableAuth': 1, 'apn': 'internet',
                                'authType': 'PAP',
                                'username': '******',
                                'password': '******'}]
     self.cellular.check_dhclient = Mock()
     with patch("cellular.subprocess") as subprocess:
         subprocess.check_output.\
             return_value = "\
                             Packet data handle: '123'\
                             CID: '23'"
         self.cellular.cid = "1234"
         res = self.cellular.set_online_by_id(0)
         self.assertEqual(res, True)
 def test_get_status_by_id_exception(self):
     self.cellular = Cellular(connection=Mockup())
     with patch("cellular.subprocess") as subprocess:
         subprocess.check_output.side_effect = Exception
         res = self.cellular.get_status_by_id(0)
         self.assertEqual(res, 2)
Esempio n. 19
0
 def test_set_offline_by_id(self):
     self.cellular = Cellular(connection=Mockup())
     with patch("cellular.subprocess") as subprocess:
         subprocess.call.return_value = True
         res = self.cellular.set_offline_by_id('1')
         self.assertEqual(res, 'success')
Esempio n. 20
0
 def test_search_dns(self):
     self.cellular = Cellular(connection=Mockup())
     res = self.cellular.search_dns(self.filetext)
     self.assertEqual(res, '8.8.8.58,20.20.20.20,40.40.4.1')
 def test_get_cops_by_id_fail(self):
     self.cellular = Cellular(connection=Mockup())
     with patch("cellular.modemcmd") as modemcmd:
         modemcmd.return_value = ""
         res = self.cellular.get_cops_by_id(0)
         self.assertEqual(res, "Unknown Operator")
 def test_get_signal_by_id_fail(self):
     self.cellular = Cellular(connection=Mockup())
     with patch("cellular.subprocess") as subprocess:
         subprocess.check_output.return_value = ""
         res = self.cellular.get_signal_by_id(0)
         self.assertEqual(res, 99)
 def setUp(self):
     self.cellular = Cellular(connection=Mockup())
 def test_get_cops_by_id(self):
     self.cellular = Cellular(connection=Mockup())
     with patch("cellular.modemcmd") as modemcmd:
         modemcmd.return_value = "+COPS: 0,0,\"Chunghwa Telecom\",2\r\nOK"
         res = self.cellular.get_cops_by_id(0)
         self.assertEqual(res, "Chunghwa Telecom")
Esempio n. 25
0
 def testInitializeAllAlive(self):
     cellular = Cellular((3, 3)).initialize(100)
     self.assertEqual(len([alive for alive in cellular]), 9)
Esempio n. 26
0
 def testInitializeAllDead(self):
     cellular = Cellular((3, 3)).initialize(0)
     self.assertEqual(len([alive for alive in cellular]), 0)
Esempio n. 27
0
 def dig(self):
     self._space = Cellular(self._size).initialize(45).update(
         5, 3, 5).areas().biggestArea()
     if not self._space: self._space = set()
     return self
 def test_get_cops_by_id_exception(self):
     self.cellular = Cellular(connection=Mockup())
     with patch("cellular.modemcmd") as modemcmd:
         modemcmd.side_effect = Exception
         res = self.cellular.get_cops_by_id(0)
         self.assertEqual(res, "Unknown Operator")
 def test_get_cops_by_id_fail(self):
     self.cellular = Cellular(connection=Mockup())
     with patch("cellular.modemcmd") as modemcmd:
         modemcmd.return_value = ""
         res = self.cellular.get_cops_by_id(0)
         self.assertEqual(res, "Unknown Operator")
class TestCellular(unittest.TestCase):

    filetext = "\
    lease {\n\
      interface \"eth0\"\n\
      fixed-address 192.168.10.26\n\
      option subnet-mask 255.255.0.0\n\
      option routers 192.168.31.115\n\
      option dhcp-lease-time 5566\n\
      option dhcp-message-type 5\n\
      option domain-name-server 8.8.8.58 20.20.20.20 40.40.4.1\n\
      option dhcp-server-identifier 192.168.31.115\n\
      option domain-name \"MXcloud115\"\n\
      renew 3 2014/10/29 12:52:19\n\
      rebind 3 2014/10/29 13:37:52\n\
      expire 3 2014/10/29 13:49:28\n\
      }\n\
      "

    filetext_fail = " "

    @patch("cellular.Cellular.set_pincode_by_id")
    def setUp(self, set_pincode_by_id):
        sh.echo("1234, 1234", _out="/run/shm/cellular.tmp")
        try:
            os.unlink(dirpath + "/../data/cellular.json")
        except Exception:
            pass
        set_pincode_by_id.return_value = True
        self.cellular = Cellular(connection=Mockup())

    def tearDown(self):
        self.cellular = None

    @patch("cellular.subprocess")
    def put_simple_test_cases(self, subprocess):
        subprocess.check_output.return_value = True
        subprocess.call.return_value = True
        test_msg = {
            "id": 12345,
            "method": "put",
            "param": {
                "id": "1"
            },
            "resource": "/network/cellulars"
        }

        # case 1: no data attribute
        def test_put_with_no_data(code=200, data=None):
            self.assertEqual(400, code)
            self.assertEqual(data, {"message": "Invalid Input."})

        message = Message(test_msg)
        self.cellular.put_root_by_id(message,
                                     response=test_put_with_no_data,
                                     test=True)

        # case 2: data dict is empty or no enable exist
        def test_put_with_random_data(code=200, data=None):
            self.assertEqual(400, code)
            self.assertEqual(data, {"message": "No such resources."})

        test_msg["data"] = dict()
        message = Message(test_msg)
        self.cellular.put_root_by_id(message,
                                     response=test_put_with_random_data,
                                     test=True)

        # case 3: data not found
        def test_put_with_unknown_data(code=200, data=None):
            self.assertEqual(400, code)
            self.assertEqual(data, {"message": "No such resources."})

        test_msg["data"] = {"path": "abcde"}
        message = Message(test_msg)
        self.cellular.id = 1
        self.cellular.put_root_by_id(message,
                                     response=test_put_with_unknown_data,
                                     test=True)

    def put_complicate_test_cases(self):
        test_msg = {
            "id": 1,
            "method": "put",
            "param": {
                "id": "1"
            },
            "resource": "/network/cellulars/1"
        }

        # case 1: data valid. test do not check message coming back
        def test_multi_input_with_valid_data(code=200, data=None):
            self.assertEqual(200, code)
            self.assertDictContainsSubset(
                data, {
                    "id": 1,
                    "apn": "internet",
                    "username": "******",
                    "enable": 0,
                    "name": "wwan1",
                    "ip": "",
                    "gateway": "",
                    "dns": "",
                    "dialNumber": "9999",
                    "password": "",
                    "pinCode": "",
                    "authType": "",
                    "modemPort": "/dev/cdc-wdm1",
                    "atPort": "/dev/ttyUSB2",
                    "enableAuth": 0,
                    "status": 0,
                    "authType": "PAP",
                    "delay": 40
                })

        test_msg["data"] = {"username": "******", "dialNumber": "9999"}
        message = Message(test_msg)
        self.cellular.put_root_by_id(message,
                                     response=test_multi_input_with_valid_data,
                                     test=True)

        def test_get_root(code=200, data=None):
            self.assertEqual(200, code)

        self.cellular.get_root_by_id(message,
                                     response=test_get_root,
                                     test=True)

        def test_enable_with_valid_data(code=200, data=None):
            self.assertEqual(200, code)
            self.assertDictContainsSubset(
                data, {
                    "id": 1,
                    "apn": "internet",
                    "username": "******",
                    "enable": 1,
                    "name": "wwan1",
                    "ip": "",
                    "gateway": "",
                    "dns": "",
                    "dialNumber": "9999",
                    "password": "",
                    "pinCode": "",
                    "authType": "",
                    "modemPort": "/dev/cdc-wdm1",
                    "atPort": "/dev/ttyUSB2",
                    "enableAuth": 0,
                    "status": 0,
                    "authType": "PAP",
                    "delay": 40
                })

        test_msg["data"] = {"enable": 1}
        message = Message(test_msg)
        self.cellular.put_root_by_id(message,
                                     response=test_enable_with_valid_data,
                                     test=True)

        def test_apn_with_valid_data(code=200, data=None):
            self.assertEqual(200, code)
            self.assertDictContainsSubset(
                data, {
                    "id": 1,
                    "apn": "hinet",
                    "username": "******",
                    "enable": 1,
                    "name": "wwan1",
                    "ip": "",
                    "gateway": "",
                    "dns": "",
                    "dialNumber": "9999",
                    "password": "",
                    "pinCode": "",
                    "authType": "",
                    "modemPort": "/dev/cdc-wdm1",
                    "atPort": "/dev/ttyUSB2",
                    "enableAuth": 0,
                    "status": 0,
                    "authType": "PAP",
                    "delay": 40
                })

        test_msg["data"] = {"apn": "hinet"}
        message = Message(test_msg)
        self.cellular.put_root_by_id(message,
                                     response=test_apn_with_valid_data,
                                     test=True)

        def test_username_with_valid_data(code=200, data=None):
            self.assertEqual(200, code)
            self.assertDictContainsSubset(
                data, {
                    "id": 1,
                    "apn": "hinet",
                    "username": "******",
                    "enable": 1,
                    "name": "wwan1",
                    "ip": "",
                    "gateway": "",
                    "dns": "",
                    "dialNumber": "9999",
                    "password": "",
                    "pinCode": "",
                    "authType": "",
                    "modemPort": "/dev/cdc-wdm1",
                    "atPort": "/dev/ttyUSB2",
                    "enableAuth": 0,
                    "status": 0,
                    "authType": "PAP",
                    "delay": 40
                })

        test_msg["data"] = {"username": "******"}
        message = Message(test_msg)
        self.cellular.put_root_by_id(message,
                                     response=test_username_with_valid_data,
                                     test=True)

        def test_name_with_valid_data(code=200, data=None):
            self.assertEqual(200, code)
            self.assertDictContainsSubset(
                data, {
                    "id": 1,
                    "apn": "hinet",
                    "username": "******",
                    "enable": 1,
                    "name": "root",
                    "ip": "",
                    "gateway": "",
                    "dns": "",
                    "dialNumber": "9999",
                    "password": "",
                    "pinCode": "",
                    "authType": "",
                    "modemPort": "/dev/cdc-wdm1",
                    "atPort": "/dev/ttyUSB2",
                    "enableAuth": 0,
                    "status": 0,
                    "authType": "PAP",
                    "delay": 40
                })

        test_msg["data"] = {"name": "root"}
        message = Message(test_msg)
        self.cellular.put_root_by_id(message,
                                     response=test_name_with_valid_data,
                                     test=True)

        def test_dialNumber_valid_data(code=200, data=None):
            self.assertEqual(200, code)
            self.assertDictContainsSubset(
                data, {
                    "id": 1,
                    "apn": "hinet",
                    "username": "******",
                    "enable": 1,
                    "name": "root",
                    "ip": "",
                    "gateway": "",
                    "dns": "",
                    "dialNumber": "*88#",
                    "password": "",
                    "pinCode": "",
                    "authType": "",
                    "modemPort": "/dev/cdc-wdm1",
                    "atPort": "/dev/ttyUSB2",
                    "enableAuth": 0,
                    "status": 0,
                    "authType": "PAP",
                    "delay": 40
                })

        test_msg["data"] = {"dialNumber": "*88#"}
        message = Message(test_msg)
        self.cellular.put_root_by_id(message,
                                     response=test_dialNumber_valid_data,
                                     test=True)

        def test_password_with_valid_data(code=200, data=None):
            self.assertEqual(200, code)
            self.assertDictContainsSubset(
                data, {
                    "id": 1,
                    "apn": "hinet",
                    "username": "******",
                    "enable": 1,
                    "name": "root",
                    "ip": "",
                    "gateway": "",
                    "dns": "",
                    "dialNumber": "*88#",
                    "password": "******",
                    "pinCode": "",
                    "authType": "",
                    "modemPort": "/dev/cdc-wdm1",
                    "atPort": "/dev/ttyUSB2",
                    "enableAuth": 0,
                    "status": 0,
                    "authType": "PAP",
                    "delay": 40
                })

        test_msg["data"] = {"password": "******"}
        message = Message(test_msg)
        self.cellular.put_root_by_id(message,
                                     response=test_password_with_valid_data,
                                     test=True)

        def test_enableAuth_with_valid_data(code=200, data=None):
            self.assertEqual(200, code)
            self.assertDictContainsSubset(
                data, {
                    "id": 1,
                    "apn": "hinet",
                    "username": "******",
                    "enable": 1,
                    "name": "root",
                    "ip": "",
                    "gateway": "",
                    "dns": "",
                    "dialNumber": "*88#",
                    "password": "******",
                    "pinCode": "",
                    "modemPort": "/dev/cdc-wdm1",
                    "atPort": "/dev/ttyUSB2",
                    "enableAuth": 1,
                    "status": 0,
                    "authType": "BOTH",
                    "delay": 40
                })

        test_msg["data"] = {
            "enableAuth": 1,
            "authType": "BOTH",
            "username": "******",
            "password": "******"
        }
        message = Message(test_msg)
        self.cellular.put_root_by_id(message,
                                     response=test_enableAuth_with_valid_data,
                                     test=True)

        def test_enableAuth_with_no_username(code=200, data=None):
            self.assertEqual(400, code)
            self.assertEqual(data, {"message": "require field is empty."})

        test_msg["data"] = {"enableAuth": 1, "username": ""}
        message = Message(test_msg)
        self.cellular.put_root_by_id(message,
                                     response=test_enableAuth_with_no_username,
                                     test=True)

        def test_authType_with_invalid_data(code=200, data=None):
            self.assertEqual(400, code)
            self.assertEqual(data, {"message": "Data invalid."})

        test_msg["data"] = {"authType": "SSS"}
        message = Message(test_msg)
        self.cellular.put_root_by_id(message,
                                     response=test_authType_with_invalid_data,
                                     test=True)

        def test_authType_with_valid_data(code=200, data=None):
            self.assertEqual(200, code)

        test_msg["data"] = {"authType": "PAP"}
        message = Message(test_msg)
        self.cellular.put_root_by_id(message,
                                     response=test_authType_with_valid_data,
                                     test=True)

    def get_complicate_test_cases(self):
        test_msg = {
            "id": 1,
            "method": "get",
            "param": {
                "id": "1"
            },
            "resource": "/network/cellulars"
        }

        def test_get_with_correct_id(code=200, data=None):
            self.assertEqual(200, code)
            self.assertDictContainsSubset(
                data, {
                    "id": 0,
                    "apn": "hinet",
                    "username": "******",
                    "enable": 1,
                    "name": "root",
                    "ip": "",
                    "gateway": "",
                    "dns": "",
                    "dialNumber": "*88#",
                    "password": "******",
                    "pinCode": "",
                    "authType": "",
                    "modemPort": "/dev/cdc-wdm1",
                    "atPort": "/dev/ttyUSB2",
                    "enableAuth": 0,
                    "status": 0,
                    "delay": 40
                })
            message = Message(test_msg)
            self.cellular.get_root_by_id(message,
                                         response=test_get_with_correct_id,
                                         test=True)

        def test_pincode_with_valid_data(code=200, data=None):
            self.assertEqual(200, code)
            self.assertDictContainsSubset(
                data, {
                    "id": 0,
                    "apn": "hinet",
                    "username": "******",
                    "enable": 1,
                    "name": "root",
                    "ip": "",
                    "gateway": "",
                    "dns": "",
                    "dialNumber": "*88#",
                    "password": "******",
                    "pinCode": "",
                    "authType": "",
                    "modemPort": "/dev/cdc-wdm1",
                    "atPort": "/dev/ttyUSB2",
                    "enableAuth": 0,
                    "status": 0,
                    "delay": 40
                })
            test_msg["data"] = {"id": "0", "pinCode": "0000"}
            message = Message(test_msg)
            self.cellular.put_root_by_id(message,
                                         response=test_pincode_with_valid_data,
                                         test=True)

    def get_test_cases(self):
        test_msg = {"id": 1, "method": "get", "resource": "/network/cellulars"}

        # case 1: data
        def test_get_root(code=200, data=None):
            self.assertEqual(200, code)

        message = Message(test_msg)
        self.cellular.get_root(message, response=test_get_root, test=True)

    def test_get_signal_by_id(self):
        self.cellular = Cellular(connection=Mockup())
        with patch("cellular.subprocess") as subprocess:
            subprocess.check_output.return_value = "-80"
            res = self.cellular.get_signal_by_id(0)
            self.assertEqual(res, -80)

    def test_get_signal_by_id_fail(self):
        self.cellular = Cellular(connection=Mockup())
        with patch("cellular.subprocess") as subprocess:
            subprocess.check_output.return_value = ""
            res = self.cellular.get_signal_by_id(0)
            self.assertEqual(res, 99)

    def test_get_signal_by_id_exception(self):
        self.cellular = Cellular(connection=Mockup())
        with patch("cellular.subprocess") as subprocess:
            subprocess.check_output.side_effect = Exception
            res = self.cellular.get_signal_by_id(0)
            self.assertEqual(res, 0)

    def test_get_cops_by_id(self):
        self.cellular = Cellular(connection=Mockup())
        with patch("cellular.modemcmd") as modemcmd:
            modemcmd.return_value = "+COPS: 0,0,\"Chunghwa Telecom\",2\r\nOK"
            res = self.cellular.get_cops_by_id(0)
            self.assertEqual(res, "Chunghwa Telecom")

    def test_get_cops_by_id_fail(self):
        self.cellular = Cellular(connection=Mockup())
        with patch("cellular.modemcmd") as modemcmd:
            modemcmd.return_value = ""
            res = self.cellular.get_cops_by_id(0)
            self.assertEqual(res, "Unknown Operator")

    def test_get_cops_by_id_exception(self):
        self.cellular = Cellular(connection=Mockup())
        with patch("cellular.modemcmd") as modemcmd:
            modemcmd.side_effect = Exception
            res = self.cellular.get_cops_by_id(0)
            self.assertEqual(res, "Unknown Operator")

    def test_get_status_by_id_disconnect(self):
        self.cellular = Cellular(connection=Mockup())
        with patch("cellular.subprocess") as subprocess:
            subprocess.check_output.return_value =\
                "Connection status: 'disconnected'"
            subprocess.call.return_value = True
            res = self.cellular.get_status_by_id(0)
            self.assertEqual(res, 0)

    def test_get_status_by_id_connect(self):
        self.cellular = Cellular(connection=Mockup())
        with patch("cellular.subprocess") as subprocess:
            subprocess.check_output.return_value =\
                "Connection status: 'connected'"
            subprocess.call.return_value = True
            res = self.cellular.get_status_by_id(0)
            self.assertEqual(res, 1)

    def test_get_status_by_id_search_fail(self):
        self.cellular = Cellular(connection=Mockup())
        with patch("cellular.subprocess") as subprocess:
            subprocess.check_output.return_value =\
                "xxxx"
            subprocess.call.return_value = None
            res = self.cellular.get_status_by_id(0)
            self.assertEqual(res, 2)

    def test_get_status_by_id_with_no_cid(self):
        self.cellular = Cellular(connection=Mockup())
        with patch("cellular.subprocess") as subprocess:
            self.cellular.cid = "1234"
            subprocess.check_output.return_value = True
            subprocess.call.return_value = True
            res = self.cellular.get_status_by_id(0)
            self.assertEqual(res, 2)

    def test_get_status_by_id_exception(self):
        self.cellular = Cellular(connection=Mockup())
        with patch("cellular.subprocess") as subprocess:
            subprocess.check_output.side_effect = Exception
            res = self.cellular.get_status_by_id(0)
            self.assertEqual(res, 2)

    def test_set_online_by_id(self):
        self.cellular = Cellular(connection=Mockup())
        self.cellular.model.db = [{
            'enable': 1,
            'name': 'wwan1',
            'modemPort': '/dev/ttyS0',
            'id': 0,
            'atPort': '/dev/ttyS0',
            'enableAuth': 1,
            'apn': 'internet',
            'authType': 'PAP',
            'username': '******',
            'password': '******'
        }]
        self.cellular.check_dhclient = Mock()
        with patch("cellular.subprocess") as subprocess:
            subprocess.check_output.\
                return_value = "\
                                Packet data handle: '123'\
                                CID: '23'"

            self.cellular.cid = "1234"
            res = self.cellular.set_online_by_id(0)
            self.assertEqual(res, True)

    def test_set_online_by_id_exception(self):
        self.cellular = Cellular(connection=Mockup())
        with patch("cellular.subprocess") as subprocess:
            subprocess.check_output.side_effect = Exception
            res = self.cellular.set_online_by_id(0)
            self.assertFalse(res)

    def test_set_offline_by_id_with_no_cid(self):
        self.cellular = Cellular(connection=Mockup())
        with patch("cellular.subprocess") as subprocess:
            subprocess.check_output.return_value = True
            self.cellular.cid = ""
            self.cellular.pdh = ""
            res = self.cellular.set_offline_by_id(0)
            self.assertEqual(res, True)

    def test_set_offline_by_id_exception(self):
        self.cellular = Cellular(connection=Mockup())
        with patch("cellular.subprocess") as subprocess:
            subprocess.check_output.side_effect = Exception
            res = self.cellular.set_offline_by_id(0)
            self.assertFalse(res)

    def test_search_name(self):
        self.cellular = Cellular(connection=Mockup())
        self.cellular.dhclient_info = self.filetext
        res = self.cellular.search_name()
        self.assertEqual(res, 'eth0')

    def test_search_name_fail(self):
        self.cellular = Cellular(connection=Mockup())
        self.cellular.dhclient_info = self.filetext_fail
        res = self.cellular.search_name()
        self.assertEqual(res, 'N/A')

    def test_search_router(self):
        self.cellular = Cellular(connection=Mockup())
        self.cellular.dhclient_info = self.filetext
        res = self.cellular.search_router()
        self.assertEqual(res, '192.168.31.115')

    def test_search_router_fail(self):
        self.cellular = Cellular(connection=Mockup())
        self.cellular.dhclient_info = self.filetext_fail
        res = self.cellular.search_router()
        self.assertEqual(res, 'N/A')

    def test_search_dns(self):
        self.cellular = Cellular(connection=Mockup())
        self.cellular.dhclient_info = self.filetext
        res = self.cellular.search_dns()
        self.assertEqual(res, ["8.8.8.58", "20.20.20.20", "40.40.4.1"])

    def test_search_dns_fail(self):
        self.cellular = Cellular(connection=Mockup())
        self.cellular.dhclient_info = self.filetext_fail
        res = self.cellular.search_dns()
        self.assertEqual(res, 'N/A')

    def test_search_ip(self):
        self.cellular = Cellular(connection=Mockup())
        self.cellular.dhclient_info = self.filetext
        res = self.cellular.search_ip()
        self.assertEqual(res, '192.168.10.26')

    def test_search_ip_fail(self):
        self.cellular = Cellular(connection=Mockup())
        self.cellular.dhclient_info = self.filetext_fail
        res = self.cellular.search_ip()
        self.assertEqual(res, 'N/A')

    def test_search_subnet(self):
        self.cellular = Cellular(connection=Mockup())
        self.cellular.dhclient_info = self.filetext
        res = self.cellular.search_subnet()
        self.assertEqual(res, '255.255.0.0')

    def test_search_subnet_fail(self):
        self.cellular = Cellular(connection=Mockup())
        res = self.cellular.search_subnet()
        self.assertEqual(res, 'N/A')

    def test_reconnect_if_disconnected(self):
        self.cellular.model.db = [{
            'enable': 1,
            'modemPort': '/dev/ttyS0',
            'atPort': '/dev/ttyS0',
            'id': 0,
            'apn': 'internet'
        }]
        self.cellular.get_signal_by_id = Mock(return_value=99)
        self.cellular.set_signal_led = Mock()
        self.cellular.is_target_device_appear = Mock(return_value=False)
        self.cellular.get_status_by_id = Mock(return_value=0)
        self.cellular.get_cops_by_id = Mock(return_value="unknown")
        self.cellular.publish.event = Mock()
        self.cellular.reconnect_if_disconnected()
        self.assertEqual(self.cellular.model.db[0]['signal'], 99)

    def test_reconnect_if_disconnected_operator_fail(self):
        self.cellular.model.db = [{
            'enable': 1,
            'name': "wwan1",
            'modemPort': '/dev/ttyS0',
            'atPort': '/dev/ttyS0',
            'id': 0,
            'apn': 'internet'
        }]
        self.cellular.get_signal_by_id = Mock(return_value=99)
        self.cellular.set_signal_led = Mock()
        self.cellular.is_target_device_appear = Mock(return_value=True)
        self.cellular.get_status_by_id = Mock(return_value=2)
        self.cellular.get_cops_by_id = Mock(return_value="unknown")
        self.cellular.publish.event = Mock()
        self.cellular.reconnect_if_disconnected()
        self.assertEqual(self.cellular.model.db[0]['signal'], 99)

    def test_reconnect_if_disconnected_current_offline_setting_offline(self):
        self.cellular.model.db = [{
            'enable': 1,
            'name': 'wwan1',
            'modemPort': '/dev/ttyS0',
            'atPort': '/dev/ttyS0',
            'enable': 0,
            'id': 0,
            'apn': 'internet'
        }]
        self.cellular.get_signal_by_id = Mock(return_value=99)
        self.cellular.set_signal_led = Mock()
        self.cellular.is_target_device_appear = Mock(return_value=True)
        self.cellular.get_status_by_id = Mock(return_value=0)
        self.cellular.get_cops_by_id = Mock(return_value="unknown")
        self.cellular.publish.event = Mock()
        self.cellular.reconnect_if_disconnected()
        self.assertEqual(self.cellular.model.db[0]['signal'], 99)

    def test_reconnect_if_disconnected_when_disconnect_and_enable_true(self):
        self.cellular.model.db = [{
            'enable': 1,
            'name': "wwan1",
            'modemPort': '/dev/ttyS0',
            'atPort': '/dev/ttyS0',
            'id': 0,
            'apn': 'internet'
        }]
        self.cellular.is_target_device_appear = Mock(return_value=True)
        self.cellular.get_signal_by_id = Mock(return_value=78)
        self.cellular.set_signal_led = Mock()
        self.cellular.get_status_by_id = Mock(return_value=0)
        self.cellular.get_cops_by_id = Mock(return_value="unknown")
        self.cellular.is_leases_file_appear = Mock(return_value=self.filetext)
        self.cellular.set_offline_by_id = Mock()
        self.cellular.set_online_by_id = Mock()
        self.cellular.publish.event = Mock()
        self.cellular.reconnect_if_disconnected()
        self.assertEqual(self.cellular.model.db[0]['signal'], 78)

    def test_reconnect_if_disconnected_when_connect_and_enable_false(self):
        self.cellular.model.db = [{
            'enable': 0,
            'name': 'wwan1',
            'atPort': '/dev/ttyS0',
            'modemPort': '/dev/ttyS0',
            'id': 0
        }]
        self.cellular.is_target_device_appear = Mock(return_value=True)
        self.cellular.get_signal_by_id = Mock(return_value=78)
        self.cellular.set_signal_led = Mock()
        self.cellular.get_status_by_id = Mock(return_value=1)
        self.cellular.get_cops_by_id = Mock(return_value="unknown")
        self.cellular.is_leases_file_appear = Mock(return_value=self.filetext)
        self.cellular.publish.event = Mock()
        self.cellular.reconnect_if_disconnected()
        self.assertEqual(self.cellular.model.db[0]['signal'], 78)

    def test_reconnect_if_disconnected_when_disconnect_and_enable_false(self):
        self.cellular.model.db = [{
            'enable': 1,
            'name': "wwan1",
            'atPort': '/dev/ttyS0',
            'modemPort': '/dev/ttyS0',
            'id': 0
        }]
        self.cellular.is_target_device_appear = Mock(return_value=True)
        self.cellular.get_signal_by_id = Mock(return_value=78)
        self.cellular.set_signal_led = Mock()
        self.cellular.get_status_by_id = Mock(return_value=1)
        self.cellular.get_cops_by_id = Mock(return_value="unknown")
        self.cellular.is_leases_file_appear = Mock(return_value=self.filetext)
        self.cellular.publish.event = Mock()
        self.cellular.reconnect_if_disconnected()
        self.assertEqual(self.cellular.model.db[0]['signal'], 78)

    def test_is_target_device_appear(self):
        res = self.cellular.is_target_device_appear('data/cellular.json')
        self.assertEqual(res, True)

    def test_is_target_device_appear_false(self):
        res = self.cellular.is_target_device_appear('/dev/asdfasdf')
        self.assertEqual(res, False)

    def test_init(self):
        with patch("cellular.ModelInitiator") as model:
            model.return_value.db.__getitem__.return_value = 1
            self.cellular.set_pincode_by_id = Mock(return_value=True)
            self.cellular.init()
Esempio n. 31
0
 def test_get_status_by_id(self):
     self.cellular = Cellular(connection=Mockup())
     with patch("cellular.subprocess") as subprocess:
         subprocess.call.return_value = True
         res = self.cellular.get_status_by_id('1')
         self.assertEqual(res, 'disconnected')
 def test_search_name(self):
     self.cellular = Cellular(connection=Mockup())
     self.cellular.dhclient_info = self.filetext
     res = self.cellular.search_name()
     self.assertEqual(res, 'eth0')
 def test_get_status_by_id_exception(self):
     self.cellular = Cellular(connection=Mockup())
     with patch("cellular.subprocess") as subprocess:
         subprocess.check_output.side_effect = Exception
         res = self.cellular.get_status_by_id(0)
         self.assertEqual(res, 2)
Esempio n. 34
0
 def test_search_dns_fail(self):
     self.cellular = Cellular(connection=Mockup())
     res = self.cellular.search_dns(self.filetext_fail)
     self.assertEqual(res, 'N/A')
 def test_search_ip(self):
     self.cellular = Cellular(connection=Mockup())
     self.cellular.dhclient_info = self.filetext
     res = self.cellular.search_ip()
     self.assertEqual(res, '192.168.10.26')
class TestCellular(unittest.TestCase):

    filetext = "\
    lease {\n\
      interface \"eth0\"\n\
      fixed-address 192.168.10.26\n\
      option subnet-mask 255.255.0.0\n\
      option routers 192.168.31.115\n\
      option dhcp-lease-time 5566\n\
      option dhcp-message-type 5\n\
      option domain-name-server 8.8.8.58 20.20.20.20 40.40.4.1\n\
      option dhcp-server-identifier 192.168.31.115\n\
      option domain-name \"MXcloud115\"\n\
      renew 3 2014/10/29 12:52:19\n\
      rebind 3 2014/10/29 13:37:52\n\
      expire 3 2014/10/29 13:49:28\n\
      }\n\
      "
    filetext_fail = " "

    @patch("cellular.Cellular.set_pincode_by_id")
    def setUp(self, set_pincode_by_id):
        sh.echo("1234, 1234", _out="/run/shm/cellular.tmp")
        try:
            os.unlink(dirpath + "/../data/cellular.json")
        except Exception:
            pass
        set_pincode_by_id.return_value = True
        self.cellular = Cellular(connection=Mockup())

    def tearDown(self):
        self.cellular = None

    @patch("cellular.subprocess")
    def put_simple_test_cases(self, subprocess):
        subprocess.check_output.return_value = True
        subprocess.call.return_value = True
        test_msg = {
            "id": 12345,
            "method": "put",
            "param": {"id": "1"},
            "resource": "/network/cellulars"
        }

        # case 1: no data attribute
        def test_put_with_no_data(code=200, data=None):
            self.assertEqual(400, code)
            self.assertEqual(data, {"message": "Invalid Input."})
        message = Message(test_msg)
        self.cellular.put_root_by_id(message, response=test_put_with_no_data,
                                     test=True)

        # case 2: data dict is empty or no enable exist
        def test_put_with_random_data(code=200, data=None):
            self.assertEqual(400, code)
            self.assertEqual(data, {"message": "No such resources."})
        test_msg["data"] = dict()
        message = Message(test_msg)
        self.cellular.put_root_by_id(message,
                                     response=test_put_with_random_data,
                                     test=True)

        # case 3: data not found
        def test_put_with_unknown_data(code=200, data=None):
            self.assertEqual(400, code)
            self.assertEqual(data, {"message": "No such resources."})
        test_msg["data"] = {"path": "abcde"}
        message = Message(test_msg)
        self.cellular.id = 1
        self.cellular.put_root_by_id(message,
                                     response=test_put_with_unknown_data,
                                     test=True)

    def put_complicate_test_cases(self):
        test_msg = {
            "id": 1,
            "method": "put",
            "param": {"id": "1"},
            "resource": "/network/cellulars/1"
        }

        # case 1: data valid. test do not check message coming back
        def test_multi_input_with_valid_data(code=200, data=None):
            self.assertEqual(200, code)
            self.assertDictContainsSubset(data, {"id": 1,
                                                 "apn": "internet",
                                                 "username": "******",
                                                 "enable": 0,
                                                 "name": "wwan1",
                                                 "ip": "",
                                                 "gateway": "",
                                                 "dns": "",
                                                 "dialNumber": "9999",
                                                 "password": "",
                                                 "pinCode": "",
                                                 "authType": "",
                                                 "modemPort": "/dev/cdc-wdm1",
                                                 "atPort": "/dev/ttyUSB2",
                                                 "enableAuth": 0,
                                                 "status": 0,
                                                 "authType": "PAP",
                                                 "delay": 40
                                                 })
        test_msg["data"] = {"username": "******", "dialNumber": "9999"}
        message = Message(test_msg)
        self.cellular.put_root_by_id(message,
                                     response=test_multi_input_with_valid_data,
                                     test=True)

        def test_get_root(code=200, data=None):
            self.assertEqual(200, code)
        self.cellular.get_root_by_id(message,
                                     response=test_get_root,
                                     test=True)

        def test_enable_with_valid_data(code=200, data=None):
            self.assertEqual(200, code)
            self.assertDictContainsSubset(data, {"id": 1,
                                                 "apn": "internet",
                                                 "username": "******",
                                                 "enable": 1,
                                                 "name": "wwan1",
                                                 "ip": "",
                                                 "gateway": "",
                                                 "dns": "",
                                                 "dialNumber": "9999",
                                                 "password": "",
                                                 "pinCode": "",
                                                 "authType": "",
                                                 "modemPort": "/dev/cdc-wdm1",
                                                 "atPort": "/dev/ttyUSB2",
                                                 "enableAuth": 0,
                                                 "status": 0,
                                                 "authType": "PAP",
                                                 "delay": 40
                                                 })
        test_msg["data"] = {"enable": 1}
        message = Message(test_msg)
        self.cellular.put_root_by_id(message,
                                     response=test_enable_with_valid_data,
                                     test=True)

        def test_apn_with_valid_data(code=200, data=None):
            self.assertEqual(200, code)
            self.assertDictContainsSubset(data, {"id": 1,
                                                 "apn": "hinet",
                                                 "username": "******",
                                                 "enable": 1,
                                                 "name": "wwan1",
                                                 "ip": "",
                                                 "gateway": "",
                                                 "dns": "",
                                                 "dialNumber": "9999",
                                                 "password": "",
                                                 "pinCode": "",
                                                 "authType": "",
                                                 "modemPort": "/dev/cdc-wdm1",
                                                 "atPort": "/dev/ttyUSB2",
                                                 "enableAuth": 0,
                                                 "status": 0,
                                                 "authType": "PAP",
                                                 "delay": 40
                                                 })
        test_msg["data"] = {"apn": "hinet"}
        message = Message(test_msg)
        self.cellular.put_root_by_id(message,
                                     response=test_apn_with_valid_data,
                                     test=True)

        def test_username_with_valid_data(code=200, data=None):
            self.assertEqual(200, code)
            self.assertDictContainsSubset(data, {"id": 1,
                                                 "apn": "hinet",
                                                 "username": "******",
                                                 "enable": 1,
                                                 "name": "wwan1",
                                                 "ip": "",
                                                 "gateway": "",
                                                 "dns": "",
                                                 "dialNumber": "9999",
                                                 "password": "",
                                                 "pinCode": "",
                                                 "authType": "",
                                                 "modemPort": "/dev/cdc-wdm1",
                                                 "atPort": "/dev/ttyUSB2",
                                                 "enableAuth": 0,
                                                 "status": 0,
                                                 "authType": "PAP",
                                                 "delay": 40
                                                 })
        test_msg["data"] = {"username": "******"}
        message = Message(test_msg)
        self.cellular.put_root_by_id(message,
                                     response=test_username_with_valid_data,
                                     test=True)

        def test_name_with_valid_data(code=200, data=None):
            self.assertEqual(200, code)
            self.assertDictContainsSubset(data, {"id": 1,
                                                 "apn": "hinet",
                                                 "username": "******",
                                                 "enable": 1,
                                                 "name": "root",
                                                 "ip": "",
                                                 "gateway": "",
                                                 "dns": "",
                                                 "dialNumber": "9999",
                                                 "password": "",
                                                 "pinCode": "",
                                                 "authType": "",
                                                 "modemPort": "/dev/cdc-wdm1",
                                                 "atPort": "/dev/ttyUSB2",
                                                 "enableAuth": 0,
                                                 "status": 0,
                                                 "authType": "PAP",
                                                 "delay": 40
                                                 })
        test_msg["data"] = {"name": "root"}
        message = Message(test_msg)
        self.cellular.put_root_by_id(message,
                                     response=test_name_with_valid_data,
                                     test=True)

        def test_dialNumber_valid_data(code=200, data=None):
            self.assertEqual(200, code)
            self.assertDictContainsSubset(data, {"id": 1,
                                                 "apn": "hinet",
                                                 "username": "******",
                                                 "enable": 1,
                                                 "name": "root",
                                                 "ip": "",
                                                 "gateway": "",
                                                 "dns": "",
                                                 "dialNumber": "*88#",
                                                 "password": "",
                                                 "pinCode": "",
                                                 "authType": "",
                                                 "modemPort": "/dev/cdc-wdm1",
                                                 "atPort": "/dev/ttyUSB2",
                                                 "enableAuth": 0,
                                                 "status": 0,
                                                 "authType": "PAP",
                                                 "delay": 40
                                                 })
        test_msg["data"] = {"dialNumber": "*88#"}
        message = Message(test_msg)
        self.cellular.put_root_by_id(message,
                                     response=test_dialNumber_valid_data,
                                     test=True)

        def test_password_with_valid_data(code=200, data=None):
            self.assertEqual(200, code)
            self.assertDictContainsSubset(data, {"id": 1,
                                                 "apn": "hinet",
                                                 "username": "******",
                                                 "enable": 1,
                                                 "name": "root",
                                                 "ip": "",
                                                 "gateway": "",
                                                 "dns": "",
                                                 "dialNumber": "*88#",
                                                 "password": "******",
                                                 "pinCode": "",
                                                 "authType": "",
                                                 "modemPort": "/dev/cdc-wdm1",
                                                 "atPort": "/dev/ttyUSB2",
                                                 "enableAuth": 0,
                                                 "status": 0,
                                                 "authType": "PAP",
                                                 "delay": 40
                                                 })
        test_msg["data"] = {"password": "******"}
        message = Message(test_msg)
        self.cellular.put_root_by_id(message,
                                     response=test_password_with_valid_data,
                                     test=True)

        def test_enableAuth_with_valid_data(code=200, data=None):
            self.assertEqual(200, code)
            self.assertDictContainsSubset(data, {"id": 1,
                                                 "apn": "hinet",
                                                 "username": "******",
                                                 "enable": 1,
                                                 "name": "root",
                                                 "ip": "",
                                                 "gateway": "",
                                                 "dns": "",
                                                 "dialNumber": "*88#",
                                                 "password": "******",
                                                 "pinCode": "",
                                                 "modemPort": "/dev/cdc-wdm1",
                                                 "atPort": "/dev/ttyUSB2",
                                                 "enableAuth": 1,
                                                 "status": 0,
                                                 "authType": "BOTH",
                                                 "delay": 40
                                                 })
        test_msg["data"] = {"enableAuth": 1, "authType": "BOTH",
                            "username": "******", "password": "******"}
        message = Message(test_msg)
        self.cellular.put_root_by_id(message,
                                     response=test_enableAuth_with_valid_data,
                                     test=True)

        def test_enableAuth_with_no_username(code=200, data=None):
            self.assertEqual(400, code)
            self.assertEqual(data, {"message": "require field is empty."})
        test_msg["data"] = {"enableAuth": 1, "username": ""}
        message = Message(test_msg)
        self.cellular.put_root_by_id(message,
                                     response=test_enableAuth_with_no_username,
                                     test=True)

        def test_authType_with_invalid_data(code=200, data=None):
            self.assertEqual(400, code)
            self.assertEqual(data, {"message": "Data invalid."})
        test_msg["data"] = {"authType": "SSS"}
        message = Message(test_msg)
        self.cellular.put_root_by_id(message,
                                     response=test_authType_with_invalid_data,
                                     test=True)

        def test_authType_with_valid_data(code=200, data=None):
            self.assertEqual(200, code)
        test_msg["data"] = {"authType": "PAP"}
        message = Message(test_msg)
        self.cellular.put_root_by_id(message,
                                     response=test_authType_with_valid_data,
                                     test=True)

    def get_complicate_test_cases(self):
        test_msg = {
            "id": 1,
            "method": "get",
            "param": {"id": "1"},
            "resource": "/network/cellulars"
        }

        def test_get_with_correct_id(code=200, data=None):
            self.assertEqual(200, code)
            self.assertDictContainsSubset(data, {"id": 0,
                                                 "apn": "hinet",
                                                 "username": "******",
                                                 "enable": 1,
                                                 "name": "root",
                                                 "ip": "",
                                                 "gateway": "",
                                                 "dns": "",
                                                 "dialNumber": "*88#",
                                                 "password": "******",
                                                 "pinCode": "",
                                                 "authType": "",
                                                 "modemPort": "/dev/cdc-wdm1",
                                                 "atPort": "/dev/ttyUSB2",
                                                 "enableAuth": 0,
                                                 "status": 0,
                                                 "delay": 40
                                                 })
            message = Message(test_msg)
            self.cellular.get_root_by_id(message,
                                         response=test_get_with_correct_id,
                                         test=True)

        def test_pincode_with_valid_data(code=200, data=None):
            self.assertEqual(200, code)
            self.assertDictContainsSubset(data, {"id": 0,
                                                 "apn": "hinet",
                                                 "username": "******",
                                                 "enable": 1,
                                                 "name": "root",
                                                 "ip": "",
                                                 "gateway": "",
                                                 "dns": "",
                                                 "dialNumber": "*88#",
                                                 "password": "******",
                                                 "pinCode": "",
                                                 "authType": "",
                                                 "modemPort": "/dev/cdc-wdm1",
                                                 "atPort": "/dev/ttyUSB2",
                                                 "enableAuth": 0,
                                                 "status": 0,
                                                 "delay": 40
                                                 })
            test_msg["data"] = {"id": "0", "pinCode": "0000"}
            message = Message(test_msg)
            self.cellular.put_root_by_id(message,
                                         response=test_pincode_with_valid_data,
                                         test=True)

    def get_test_cases(self):
        test_msg = {
            "id": 1,
            "method": "get",
            "resource": "/network/cellulars"
        }

        # case 1: data
        def test_get_root(code=200, data=None):
            self.assertEqual(200, code)
        message = Message(test_msg)
        self.cellular.get_root(message, response=test_get_root, test=True)

    def test_get_signal_by_id(self):
        self.cellular = Cellular(connection=Mockup())
        with patch("cellular.subprocess") as subprocess:
            subprocess.check_output.return_value = "-80"
            res = self.cellular.get_signal_by_id(0)
            self.assertEqual(res, -80)

    def test_get_signal_by_id_fail(self):
        self.cellular = Cellular(connection=Mockup())
        with patch("cellular.subprocess") as subprocess:
            subprocess.check_output.return_value = ""
            res = self.cellular.get_signal_by_id(0)
            self.assertEqual(res, 99)

    def test_get_signal_by_id_exception(self):
        self.cellular = Cellular(connection=Mockup())
        with patch("cellular.subprocess") as subprocess:
            subprocess.check_output.side_effect = Exception
            res = self.cellular.get_signal_by_id(0)
            self.assertEqual(res, 0)

    def test_get_cops_by_id(self):
        self.cellular = Cellular(connection=Mockup())
        with patch("cellular.modemcmd") as modemcmd:
            modemcmd.return_value = "+COPS: 0,0,\"Chunghwa Telecom\",2\r\nOK"
            res = self.cellular.get_cops_by_id(0)
            self.assertEqual(res, "Chunghwa Telecom")

    def test_get_cops_by_id_fail(self):
        self.cellular = Cellular(connection=Mockup())
        with patch("cellular.modemcmd") as modemcmd:
            modemcmd.return_value = ""
            res = self.cellular.get_cops_by_id(0)
            self.assertEqual(res, "Unknown Operator")

    def test_get_cops_by_id_exception(self):
        self.cellular = Cellular(connection=Mockup())
        with patch("cellular.modemcmd") as modemcmd:
            modemcmd.side_effect = Exception
            res = self.cellular.get_cops_by_id(0)
            self.assertEqual(res, "Unknown Operator")

    def test_get_status_by_id_disconnect(self):
        self.cellular = Cellular(connection=Mockup())
        with patch("cellular.subprocess") as subprocess:
            subprocess.check_output.return_value =\
                "Connection status: 'disconnected'"
            subprocess.call.return_value = True
            res = self.cellular.get_status_by_id(0)
            self.assertEqual(res, 0)

    def test_get_status_by_id_connect(self):
        self.cellular = Cellular(connection=Mockup())
        with patch("cellular.subprocess") as subprocess:
            subprocess.check_output.return_value =\
                "Connection status: 'connected'"
            subprocess.call.return_value = True
            res = self.cellular.get_status_by_id(0)
            self.assertEqual(res, 1)

    def test_get_status_by_id_search_fail(self):
        self.cellular = Cellular(connection=Mockup())
        with patch("cellular.subprocess") as subprocess:
            subprocess.check_output.return_value =\
                "xxxx"
            subprocess.call.return_value = None
            res = self.cellular.get_status_by_id(0)
            self.assertEqual(res, 2)

    def test_get_status_by_id_with_no_cid(self):
        self.cellular = Cellular(connection=Mockup())
        with patch("cellular.subprocess") as subprocess:
            self.cellular.cid = "1234"
            subprocess.check_output.return_value = True
            subprocess.call.return_value = True
            res = self.cellular.get_status_by_id(0)
            self.assertEqual(res, 2)

    def test_get_status_by_id_exception(self):
        self.cellular = Cellular(connection=Mockup())
        with patch("cellular.subprocess") as subprocess:
            subprocess.check_output.side_effect = Exception
            res = self.cellular.get_status_by_id(0)
            self.assertEqual(res, 2)

    def test_set_online_by_id(self):
        self.cellular = Cellular(connection=Mockup())
        self.cellular.model.db = [{'enable': 1,
                                   'name': 'wwan1',
                                   'modemPort': '/dev/ttyS0', 'id': 0,
                                   'atPort': '/dev/ttyS0',
                                   'enableAuth': 1, 'apn': 'internet',
                                   'authType': 'PAP',
                                   'username': '******',
                                   'password': '******'}]
        self.cellular.check_dhclient = Mock()
        with patch("cellular.subprocess") as subprocess:
            subprocess.check_output.\
                return_value = "\
                                Packet data handle: '123'\
                                CID: '23'"
            self.cellular.cid = "1234"
            res = self.cellular.set_online_by_id(0)
            self.assertEqual(res, True)

    def test_set_online_by_id_exception(self):
        self.cellular = Cellular(connection=Mockup())
        with patch("cellular.subprocess") as subprocess:
            subprocess.check_output.side_effect = Exception
            res = self.cellular.set_online_by_id(0)
            self.assertFalse(res)

    def test_set_offline_by_id_with_no_cid(self):
        self.cellular = Cellular(connection=Mockup())
        with patch("cellular.subprocess") as subprocess:
            subprocess.check_output.return_value = True
            self.cellular.cid = ""
            self.cellular.pdh = ""
            res = self.cellular.set_offline_by_id(0)
            self.assertEqual(res, True)

    def test_set_offline_by_id_exception(self):
        self.cellular = Cellular(connection=Mockup())
        with patch("cellular.subprocess") as subprocess:
            subprocess.check_output.side_effect = Exception
            res = self.cellular.set_offline_by_id(0)
            self.assertFalse(res)

    def test_search_name(self):
        self.cellular = Cellular(connection=Mockup())
        self.cellular.dhclient_info = self.filetext
        res = self.cellular.search_name()
        self.assertEqual(res, 'eth0')

    def test_search_name_fail(self):
        self.cellular = Cellular(connection=Mockup())
        self.cellular.dhclient_info = self.filetext_fail
        res = self.cellular.search_name()
        self.assertEqual(res, 'N/A')

    def test_search_router(self):
        self.cellular = Cellular(connection=Mockup())
        self.cellular.dhclient_info = self.filetext
        res = self.cellular.search_router()
        self.assertEqual(res, '192.168.31.115')

    def test_search_router_fail(self):
        self.cellular = Cellular(connection=Mockup())
        self.cellular.dhclient_info = self.filetext_fail
        res = self.cellular.search_router()
        self.assertEqual(res, 'N/A')

    def test_search_dns(self):
        self.cellular = Cellular(connection=Mockup())
        self.cellular.dhclient_info = self.filetext
        res = self.cellular.search_dns()
        self.assertEqual(res, ["8.8.8.58", "20.20.20.20", "40.40.4.1"])

    def test_search_dns_fail(self):
        self.cellular = Cellular(connection=Mockup())
        self.cellular.dhclient_info = self.filetext_fail
        res = self.cellular.search_dns()
        self.assertEqual(res, 'N/A')

    def test_search_ip(self):
        self.cellular = Cellular(connection=Mockup())
        self.cellular.dhclient_info = self.filetext
        res = self.cellular.search_ip()
        self.assertEqual(res, '192.168.10.26')

    def test_search_ip_fail(self):
        self.cellular = Cellular(connection=Mockup())
        self.cellular.dhclient_info = self.filetext_fail
        res = self.cellular.search_ip()
        self.assertEqual(res, 'N/A')

    def test_search_subnet(self):
        self.cellular = Cellular(connection=Mockup())
        self.cellular.dhclient_info = self.filetext
        res = self.cellular.search_subnet()
        self.assertEqual(res, '255.255.0.0')

    def test_search_subnet_fail(self):
        self.cellular = Cellular(connection=Mockup())
        res = self.cellular.search_subnet()
        self.assertEqual(res, 'N/A')

    def test_reconnect_if_disconnected(self):
        self.cellular.model.db = [{'enable': 1,
                                   'modemPort': '/dev/ttyS0',
                                   'atPort': '/dev/ttyS0',
                                   'id': 0, 'apn': 'internet'}]
        self.cellular.get_signal_by_id = Mock(return_value=99)
        self.cellular.set_signal_led = Mock()
        self.cellular.is_target_device_appear = Mock(return_value=False)
        self.cellular.get_status_by_id = Mock(return_value=0)
        self.cellular.get_cops_by_id = Mock(return_value="unknown")
        self.cellular.publish.event = Mock()
        self.cellular.reconnect_if_disconnected()
        self.assertEqual(self.cellular.model.db[0]['signal'], 99)

    def test_reconnect_if_disconnected_operator_fail(self):
        self.cellular.model.db = [{'enable': 1,
                                   'name': "wwan1",
                                   'modemPort': '/dev/ttyS0',
                                   'atPort': '/dev/ttyS0',
                                   'id': 0, 'apn': 'internet'}]
        self.cellular.get_signal_by_id = Mock(return_value=99)
        self.cellular.set_signal_led = Mock()
        self.cellular.is_target_device_appear = Mock(return_value=True)
        self.cellular.get_status_by_id = Mock(return_value=2)
        self.cellular.get_cops_by_id = Mock(return_value="unknown")
        self.cellular.publish.event = Mock()
        self.cellular.reconnect_if_disconnected()
        self.assertEqual(self.cellular.model.db[0]['signal'], 99)

    def test_reconnect_if_disconnected_current_offline_setting_offline(self):
        self.cellular.model.db = [{'enable': 1,
                                   'name': 'wwan1',
                                   'modemPort': '/dev/ttyS0',
                                   'atPort': '/dev/ttyS0',
                                   'enable': 0,
                                   'id': 0, 'apn': 'internet'}]
        self.cellular.get_signal_by_id = Mock(return_value=99)
        self.cellular.set_signal_led = Mock()
        self.cellular.is_target_device_appear = Mock(return_value=True)
        self.cellular.get_status_by_id = Mock(return_value=0)
        self.cellular.get_cops_by_id = Mock(return_value="unknown")
        self.cellular.publish.event = Mock()
        self.cellular.reconnect_if_disconnected()
        self.assertEqual(self.cellular.model.db[0]['signal'], 99)

    def test_reconnect_if_disconnected_when_disconnect_and_enable_true(self):
        self.cellular.model.db = [{'enable': 1,
                                   'name': "wwan1",
                                   'modemPort': '/dev/ttyS0',
                                   'atPort': '/dev/ttyS0',
                                   'id': 0, 'apn': 'internet'}]
        self.cellular.is_target_device_appear = Mock(return_value=True)
        self.cellular.get_signal_by_id = Mock(return_value=78)
        self.cellular.set_signal_led = Mock()
        self.cellular.get_status_by_id = Mock(return_value=0)
        self.cellular.get_cops_by_id = Mock(return_value="unknown")
        self.cellular.is_leases_file_appear = Mock(return_value=self.filetext)
        self.cellular.set_offline_by_id = Mock()
        self.cellular.set_online_by_id = Mock()
        self.cellular.publish.event = Mock()
        self.cellular.reconnect_if_disconnected()
        self.assertEqual(self.cellular.model.db[0]['signal'], 78)

    def test_reconnect_if_disconnected_when_connect_and_enable_false(self):
        self.cellular.model.db = [{'enable': 0,
                                   'name': 'wwan1',
                                   'atPort': '/dev/ttyS0',
                                   'modemPort': '/dev/ttyS0', 'id': 0}]
        self.cellular.is_target_device_appear = Mock(return_value=True)
        self.cellular.get_signal_by_id = Mock(return_value=78)
        self.cellular.set_signal_led = Mock()
        self.cellular.get_status_by_id = Mock(return_value=1)
        self.cellular.get_cops_by_id = Mock(return_value="unknown")
        self.cellular.is_leases_file_appear = Mock(return_value=self.filetext)
        self.cellular.publish.event = Mock()
        self.cellular.reconnect_if_disconnected()
        self.assertEqual(self.cellular.model.db[0]['signal'], 78)

    def test_reconnect_if_disconnected_when_disconnect_and_enable_false(self):
        self.cellular.model.db = [{'enable': 1,
                                   'name': "wwan1",
                                   'atPort': '/dev/ttyS0',
                                   'modemPort': '/dev/ttyS0', 'id': 0}]
        self.cellular.is_target_device_appear = Mock(return_value=True)
        self.cellular.get_signal_by_id = Mock(return_value=78)
        self.cellular.set_signal_led = Mock()
        self.cellular.get_status_by_id = Mock(return_value=1)
        self.cellular.get_cops_by_id = Mock(return_value="unknown")
        self.cellular.is_leases_file_appear = Mock(return_value=self.filetext)
        self.cellular.publish.event = Mock()
        self.cellular.reconnect_if_disconnected()
        self.assertEqual(self.cellular.model.db[0]['signal'], 78)

    def test_is_target_device_appear(self):
        res = self.cellular.is_target_device_appear('data/cellular.json')
        self.assertEqual(res, True)

    def test_is_target_device_appear_false(self):
        res = self.cellular.is_target_device_appear('/dev/asdfasdf')
        self.assertEqual(res, False)

    def test_init(self):
        with patch("cellular.ModelInitiator") as model:
            model.return_value.db.__getitem__.return_value = 1
            self.cellular.set_pincode_by_id = Mock(return_value=True)
            self.cellular.init()
 def test_search_subnet(self):
     self.cellular = Cellular(connection=Mockup())
     self.cellular.dhclient_info = self.filetext
     res = self.cellular.search_subnet()
     self.assertEqual(res, '255.255.0.0')
 def test_get_cops_by_id(self):
     self.cellular = Cellular(connection=Mockup())
     with patch("cellular.modemcmd") as modemcmd:
         modemcmd.return_value = "+COPS: 0,0,\"Chunghwa Telecom\",2\r\nOK"
         res = self.cellular.get_cops_by_id(0)
         self.assertEqual(res, "Chunghwa Telecom")
Esempio n. 39
0
class Bricka:
	def __init__(self, driver_type = driverType, width = 320, height = 240):
		self.use_cellular_paddle = False
		self.use_cellular_brick = False
		self.font_height = 20
		self.back_color = SColor(255, 80, 80, 80)
		self.white = SColor(255, 255, 255, 255)
		self.brick_color = SColor(255, 200, 200, 0)
		self.ball_vel_default = position2di(2, -2)
		self.texture_paddle = None
		self.texture_brick = None
		self.help_dialog = None
		self.video_driver = None
		self.scene_manager = None
		self.gui_environment = None
		self.font_text = None
		self.font_chess = None
		self.skin = None
		p = SIrrlichtCreationParameters()
		p.DriverType = driverType
		p.WindowSize = dimension2du(width, height)
		p.AntiAlias = True
		p.WithAlphaChannel = True
		self.device = createDeviceEx(p)
		if self.device:
			self.device.setResizable(True)
			self.device.setWindowCaption('bricka (a breakout clone by codeNtronix.com)')
			self.video_driver = self.device.getVideoDriver()
			self.scene_manager = self.device.getSceneManager()
			self.gui_environment = self.device.getGUIEnvironment()
			# icon
			if is_frozen():
				self.video_driver.SetIcon(101)
			else:
				self.video_driver.SetIcon()
			# skin
			self.skin = self.gui_environment.getSkin()
			for i in range(EGDC_COUNT):
				col = self.skin.getColor(i)
				col.setAlpha(200)
				self.skin.setColor(i, col)
				if (i + 2) > EGDC_COUNT:
					break
			# font
			self.font = CGUITTFont(self.gui_environment, os.environ['SYSTEMROOT']+'/Fonts/arial.ttf', self.font_height)
			if self.font:
				self.skin.setFont(self.font)
			# add 3d ball
			#~ self.ball3d = self.scene_manager.addSphereSceneNode(float(BALL_DIAMETER))
			# add camera for 3d view
			self.camera = self.scene_manager.addCameraSceneNode(position = vector3df(0,0,-400))
			#~ self.camera = self.scene_manager.addCameraSceneNodeMaya(distance = 400)
			# initialize first level
			self.init_game()

	def offset_x(self, rect, value):
		rect.UpperLeftCorner.X += value
		rect.LowerRightCorner.X += value

	def offset_y(self, rect, value):
		rect.UpperLeftCorner.Y += value
		rect.LowerRightCorner.Y += value

	def offset(self, rect, x, y):
		self.offset_x(rect, x)
		self.offset_y(rect, y)

	def set_ball_x(self, value):
		self.ball.UpperLeftCorner.X = value
		self.ball.LowerRightCorner.X = value + BALL_DIAMETER

	def set_ball_y(self, value):
		self.ball.UpperLeftCorner.Y = value
		self.ball.LowerRightCorner.Y = value + BALL_DIAMETER

	def set_paddle_x(self, value):
		self.paddle.UpperLeftCorner.X = value
		self.paddle.LowerRightCorner.X = value + self.paddle_width

	def set_paddle_y(self, value):
		self.paddle.UpperLeftCorner.Y = value
		self.paddle.LowerRightCorner.Y = value + self.paddle_height

	def init_game(self):
		screen_size = self.video_driver.getScreenSize()
		self.brick_width = abs(screen_size.X / 11)
		self.brick_height = abs(screen_size.X / 32)
		self.paddle_width = 60
		self.paddle_height = 12
		self.max_paddle_x = screen_size.X - self.paddle_width
		self.max_ball_x = screen_size.X - BALL_DIAMETER
		self.max_ball_y = screen_size.Y - BALL_DIAMETER
		# Paddle X,Y coordinate
		self.paddle_x = (screen_size.X - self.paddle_width) / 2
		self.paddle_y = screen_size.Y - self.paddle_height - 10
		# ball X,Y coordinate
		self.ball_x = self.paddle_x
		self.ball_y = self.paddle_y - BALL_DIAMETER
		self.lives = 3
		self.score = 0
		self.state = STATE_BALL_IN_PADDLE
		self.paddle = recti(self.paddle_x, self.paddle_y, self.paddle_x + self.paddle_width, self.paddle_y + self.paddle_height)
		self.ball = recti(self.ball_x, self.ball_y, self.ball_x + BALL_DIAMETER, self.ball_y + BALL_DIAMETER)
		self.ball_vel = self.ball_vel_default
		#~ self.ball3d.setPosition(vector3df(self.ball_x, self.ball_y, 0))
		# cellular texture generator
		self.cell_paddle = Cellular(self.video_driver, self.paddle_width, self.paddle_height, 128)
		self.cell_brick = Cellular(self.video_driver, self.brick_width, self.brick_height, 128)
		if not self.texture_paddle:
			self.texture_paddle = self.cell_paddle.get_texture()
		else:
			self.texture_paddle = self.cell_paddle.get_new_texture(cellSize = 8, density = 4.0, rand_range_count = 25)
		if not self.texture_brick:
			self.texture_brick = self.cell_brick.get_texture()
		else:
			self.texture_brick = self.cell_brick.get_new_texture(mFact = .5, lPower = .5)
		self.create_bricks()

	def show_stats(self):
		if self.font:
			text = 'SCORE: %d    LIVES: %d' % (self.score, self.lives)
			screen_size = self.video_driver.getScreenSize()
			text_dimension = self.font.getDimension(text)
			self.font.draw(text, recti((screen_size.X - text_dimension.Width) / 2, 5, text_dimension.Width, self.font_height), self.white)

	def show_message(self, message):
		if self.font:
			screen_size = self.video_driver.getScreenSize()
			delta_y = 0
			for text in message:
				text_dimension = self.font.getDimension(text)
				self.font.draw(text, recti((screen_size.X - text_dimension.Width) / 2, screen_size.Y / 2 + delta_y, text_dimension.Width, (screen_size.Y - text_dimension.Height) / 2 + delta_y), self.white)
				delta_y += text_dimension.Height

	def create_bricks(self):
		screen_size = self.video_driver.getScreenSize()
		x_delta = self.brick_width + 10
		count_rows = abs(screen_size.Y / 68)
		count_columns = abs(screen_size.X / x_delta - 1)
		x1 = (screen_size.X - x_delta * count_columns) / 2
		y_ofs = 35
		self.bricks = []
		for i in range(count_rows):
			x_ofs = x1
			for j in range(count_columns):
				self.bricks.append(recti(x_ofs, y_ofs, x_ofs + self.brick_width, y_ofs + self.brick_height))
				x_ofs += x_delta
			y_ofs += self.brick_height + 5

	def draw_bricks(self):
		for brick in self.bricks:
			if self.texture_brick and self.use_cellular_brick:
				self.video_driver.draw2DImage(self.texture_brick, brick.UpperLeftCorner)
			else:
				self.video_driver.draw2DRectangle(self.brick_color, brick)

	def move_ball(self):
		self.offset(self.ball, self.ball_vel.X, self.ball_vel.Y)
		if self.ball.UpperLeftCorner.X <= 0:
			self.set_ball_x(0)
			self.ball_vel.X = -self.ball_vel.X
		elif self.ball.UpperLeftCorner.X >= self.max_ball_x:
			self.set_ball_x(self.max_ball_x)
			self.ball_vel.X = -self.ball_vel.X
		if self.ball.UpperLeftCorner.Y < 0:
			self.set_ball_y(0)
			self.ball_vel.Y = -self.ball_vel.Y
		elif self.ball.UpperLeftCorner.Y >= self.max_ball_y:            
			self.set_ball_y(self.max_ball_y)
			self.ball_vel.Y = -self.ball_vel.Y

	def handle_collisions(self):
		result = None
		for brick in self.bricks:
			if self.ball.isRectCollided(brick):
				self.score += 3
				self.ball_vel.Y = -self.ball_vel.Y
				self.bricks.remove(brick)
				result = brick
				break
		if len(self.bricks) == 0:
			self.state = STATE_WON
		if self.ball.isRectCollided(self.paddle):
			self.set_ball_y(self.paddle_y - BALL_DIAMETER)
			self.ball_vel.Y = -self.ball_vel.Y
		elif self.ball.UpperLeftCorner.Y > self.paddle.UpperLeftCorner.Y:
			self.lives -= 1
			if self.lives > 0:
				self.state = STATE_BALL_IN_PADDLE
			else:
				self.state = STATE_GAME_OVER
		return result

	def run(self):
		destroyed_brick = None
		destroyed_color1 = SColor(255, 0, 255, 0)
		destroyed_color2 = SColor(255, 255, 255, 0)
		destroyed_color3 = SColor(255, 0, 0, 255)
		destroyed_color4 = SColor(255, 255, 0, 0)
		color_red = SColor(255, 200, 0, 0)
		color_yellow = SColor(255, 200, 200, 0)
		color_green = SColor(255, 0, 200, 0)
		color_blue = SColor(255, 0, 0, 200)
		i_event_receiver = event_receiver()
		i_event_receiver.game = self
		self.device.setEventReceiver(i_event_receiver)
		self.device.getTimer().setSpeed(10.0)
		while self.device.run():
			if self.device.isWindowActive():
				if i_event_receiver.stop:
					break
				if self.video_driver.beginScene(True, True, self.back_color):
					if self.state == STATE_PLAYING:
						if not self.help_dialog:
							if self.device.getTimer().getTime() > 100:
								self.move_ball()
								self.device.getTimer().setTime(0)
							pos = self.handle_collisions()
							if pos:
								destroyed_brick = pos
							if destroyed_brick:
								if self.use_cellular_brick:
									self.video_driver.draw2DRectangle(destroyed_color1, destroyed_brick)
								else:
									self.video_driver.draw2DRectangle(destroyed_brick, destroyed_color1, destroyed_color2, destroyed_color3, destroyed_color4)
									destroyed_color2.a = destroyed_color2.a - 25
									destroyed_color3.a = destroyed_color3.a - 25
									destroyed_color4.a = destroyed_color4.a - 25
								destroyed_color1.a = destroyed_color1.a - 25
								if destroyed_color1.a < 50:
									destroyed_brick = None
									destroyed_color1.a = 255
									if not self.use_cellular_brick:
										destroyed_color2.a = 255
										destroyed_color3.a = 255
										destroyed_color4.a = 255
					elif self.state == STATE_BALL_IN_PADDLE:
						self.set_ball_x(self.paddle.UpperLeftCorner.X + self.paddle.getWidth() / 2)
						self.set_ball_y(self.paddle.UpperLeftCorner.Y - self.ball.getHeight())
						self.show_message(('PRESS SPACE', 'TO LAUNCH THE BALL', 'F1 - help, ESC - exit'))
					elif self.state == STATE_GAME_OVER:
						self.show_message(('GAME OVER', 'PRESS ENTER TO PLAY AGAIN'))
					elif self.state == STATE_WON:
						self.show_message(('YOU WON!', 'PRESS ENTER TO PLAY AGAIN'))
					self.draw_bricks()
					# Draw paddle
					if self.texture_paddle and self.use_cellular_paddle:
						self.video_driver.draw2DImage(self.texture_paddle, self.paddle.UpperLeftCorner)
					else:
						self.video_driver.draw2DRectangle(self.paddle, color_yellow, color_red, color_green, color_blue)
					# Draw ball
					#~ self.video_driver.draw2DRectangle(self.white, self.ball)
					x1, y1 = self.ball.UpperLeftCorner.get_XY()
					x2, y2 = self.ball.LowerRightCorner.get_XY()
					self.video_driver.draw2DPolygon(recti(x1 + ball_delta, y1 + ball_delta, x2 + ball_delta, y2 + ball_delta), BALL_RADIUS, self.white)
					#~ ball_draw = self.ball + ball_delta
					#~ self.video_driver.draw2DPolygon(ball_draw, BALL_RADIUS, self.white)
					#~ self.ball3d.setPosition(vector3df(x1 + ball_delta, y1 + ball_delta, 0))
					#~ self.scene_manager.drawAll()
					self.show_stats()
					if self.help_dialog:
						self.gui_environment.drawAll()
					self.video_driver.endScene()
				self.device.sleep(1)
			else:
				self.device._yield()
		self.device.closeDevice()
		self.device.drop()
 def test_get_cops_by_id_exception(self):
     self.cellular = Cellular(connection=Mockup())
     with patch("cellular.modemcmd") as modemcmd:
         modemcmd.side_effect = Exception
         res = self.cellular.get_cops_by_id(0)
         self.assertEqual(res, "Unknown Operator")
Esempio n. 41
0
    def show(self):
        """Shows maze using pyirrlicht. Outer walls as optional"""
        #~ self.device = createDevice(driverType, dimension2du(800, 600))
        p = SIrrlichtCreationParameters()
        p.DriverType = driverType
        #~ p.Fullscreen = True
        p.WindowSize = dimension2du(800, 600)
        p.AntiAlias = True
        p.WithAlphaChannel = True
        self.device = createDeviceEx(p)
        if self.device:
            self.device.setWindowCaption(
                'Irrlicht Engine - 3D Maze generator, written Dolkar from http://www.python-forum.org'
            )
            self.video_driver = self.device.getVideoDriver()
            self.scene_manager = self.device.getSceneManager()
            self.gui_environment = self.device.getGUIEnvironment()

            gui_font = CGUITTFont(
                self.gui_environment,
                os.environ['SYSTEMROOT'] + '/Fonts/arial.ttf', 20)
            if gui_font:
                self.gui_environment.getSkin().setFont(gui_font)
                gui_font.drop()

            # meta triangle selector
            self.i_meta_triangle_selector = self.scene_manager.createMetaTriangleSelector(
            )

            # cellular texture generator
            self.cell = Cellular(self.video_driver, 128, 128, 128)

            #~ sky_node = self.scene_manager.addSkyDomeSceneNode(generate_texture(self.video_driver))
            m2d = maze2d(self.video_driver, 50, 50, (255, 255, 255),
                         (100, 100, 100))
            sky_node = self.scene_manager.addSkyBoxSceneNode(
                m2d, m2d, m2d, m2d, m2d, m2d)

            # create maze volume
            self.create_level()
            self.create_outer_walls()

            # START SPHERE
            self.sphere_start = self.scene_manager.addSphereSceneNode(
                0.25, position=vector3df(*self.start_cell))
            material1 = self.sphere_start.getMaterial(0)
            material1.EmissiveColor = SColor(255, 0, 255, 0)

            # FINISH SPHERE
            finish_position = vector3df(*self.end_cell)
            self.sphere_finish = self.scene_manager.addSphereSceneNode(
                0.3, id=ID_FINISH_NODE, position=finish_position)
            material2 = self.sphere_finish.getMaterial(0)
            material2.EmissiveColor = SColor(255, 255, 0, 0)
            self.finish_box = aabbox3df(finish_position - 0.5,
                                        finish_position + 0.5)

            keyMap = SKeyMap(10)
            keyMap.set(0, EKA_MOVE_FORWARD, KEY_UP)
            keyMap.set(1, EKA_MOVE_FORWARD, KEY_KEY_W)
            keyMap.set(2, EKA_MOVE_BACKWARD, KEY_DOWN)
            keyMap.set(3, EKA_MOVE_BACKWARD, KEY_KEY_S)
            keyMap.set(4, EKA_STRAFE_LEFT, KEY_LEFT)
            keyMap.set(5, EKA_STRAFE_LEFT, KEY_KEY_A)
            keyMap.set(6, EKA_STRAFE_RIGHT, KEY_RIGHT)
            keyMap.set(7, EKA_STRAFE_RIGHT, KEY_KEY_D)
            keyMap.set(8, EKA_JUMP_UP, KEY_KEY_J)
            keyMap.set(9, EKA_CROUCH, KEY_KEY_C)

            self.camera = self.scene_manager.addCameraSceneNodeFPS(
                moveSpeed=0.005,
                jumpSpeed=0.5,
                keyMapArray=keyMap,
                keyMapSize=keyMap.length)
            self.camera.setPosition(vector3df(*self.start_cell))
            self.camera.setNearValue(0.001)

            self.add_animator_to_camera()

            light_radius = 10.0
            if driverType in (EDT_DIRECT3D8, EDT_DIRECT3D9):
                light_radius = 1.5
            elif driverType == EDT_OPENGL:
                light_radius = 0.1
            light = self.scene_manager.addLightSceneNode(self.camera,
                                                         radius=light_radius)

            #~ collision_manager = self.scene_manager.getSceneCollisionManager()
            self.win_dialog = None

            scolor = SColor(255, 100, 100, 140)
            i_event_receiver = event_receiver()
            i_event_receiver.game = self
            self.device.setEventReceiver(i_event_receiver)
            while self.device.run():
                if self.device.isWindowActive():
                    if i_event_receiver.stop:
                        break
                    if self.video_driver.beginScene(True, True, scolor):
                        try:
                            self.win_dialog.getID()
                        except:
                            self.win_dialog = None
                            self.camera.setInputReceiverEnabled(True)
                        self.scene_manager.drawAll()
                        if self.finish_box.isPointInside(
                                self.camera.getPosition(
                                )) and not self.win_dialog:
                            self.camera.setInputReceiverEnabled(False)
                            self.win_dialog = self.gui_environment.addMessageBox(
                                'Warning', 'You is Winner!!!')
                            #~ self.finish_box.reset(0.1, 0.1, 0.1)
                            self.recreate_level()
                        #~ collision_node = collision_manager.getSceneNodeFromCameraBB(self.camera)
                        #~ if collision_node:
                        #~ if collision_node.getID() == ID_FINISH_NODE:
                        #~ self.gui_environment.addMessageBox('Warning', 'You is Winner!!!')
                        self.gui_environment.drawAll()
                        self.video_driver.endScene()
                    #~ self.device.sleep(10)
                else:
                    self.device.yield_self()
            self.device.drop()
            self.device.closeDevice()
        else:
            print('ERROR createDevice')
Esempio n. 42
0
 def test_search_router(self):
     self.cellular = Cellular(connection=Mockup())
     res = self.cellular.search_router(self.filetext)
     self.assertEqual(res, '192.168.31.115')
Esempio n. 43
0
 def setUp(self):
     def zombiefn():
         pass
     self.cellular = Cellular(connection=Mockup())
Esempio n. 44
0
 def test_set_online_by_id_exception(self):
     self.cellular = Cellular(connection=Mockup())
     with patch("cellular.subprocess") as subprocess:
         subprocess.check_output.side_effect = Exception
         res = self.cellular.set_online_by_id('1')
         self.assertEqual(res, 'fail')
 def test_search_ip(self):
     self.cellular = Cellular(connection=Mockup())
     self.cellular.dhclient_info = self.filetext
     res = self.cellular.search_ip()
     self.assertEqual(res, '192.168.10.26')
 def test_search_ip_fail(self):
     self.cellular = Cellular(connection=Mockup())
     self.cellular.dhclient_info = self.filetext_fail
     res = self.cellular.search_ip()
     self.assertEqual(res, 'N/A')
 def test_search_subnet(self):
     self.cellular = Cellular(connection=Mockup())
     self.cellular.dhclient_info = self.filetext
     res = self.cellular.search_subnet()
     self.assertEqual(res, '255.255.0.0')
 def test_set_offline_by_id_exception(self):
     self.cellular = Cellular(connection=Mockup())
     with patch("cellular.subprocess") as subprocess:
         subprocess.check_output.side_effect = Exception
         res = self.cellular.set_offline_by_id(0)
         self.assertFalse(res)
 def test_search_subnet_fail(self):
     self.cellular = Cellular(connection=Mockup())
     res = self.cellular.search_subnet()
     self.assertEqual(res, 'N/A')
 def test_search_dns(self):
     self.cellular = Cellular(connection=Mockup())
     self.cellular.dhclient_info = self.filetext
     res = self.cellular.search_dns()
     self.assertEqual(res, ["8.8.8.58", "20.20.20.20", "40.40.4.1"])
 def test_get_signal_by_id_fail(self):
     self.cellular = Cellular(connection=Mockup())
     with patch("cellular.subprocess") as subprocess:
         subprocess.check_output.return_value = ""
         res = self.cellular.get_signal_by_id(0)
         self.assertEqual(res, 99)
 def test_search_ip_fail(self):
     self.cellular = Cellular(connection=Mockup())
     self.cellular.dhclient_info = self.filetext_fail
     res = self.cellular.search_ip()
     self.assertEqual(res, 'N/A')
 def test_set_offline_by_id_exception(self):
     self.cellular = Cellular(connection=Mockup())
     with patch("cellular.subprocess") as subprocess:
         subprocess.check_output.side_effect = Exception
         res = self.cellular.set_offline_by_id(0)
         self.assertFalse(res)
 def test_search_subnet_fail(self):
     self.cellular = Cellular(connection=Mockup())
     res = self.cellular.search_subnet()
     self.assertEqual(res, 'N/A')
 def test_search_name(self):
     self.cellular = Cellular(connection=Mockup())
     self.cellular.dhclient_info = self.filetext
     res = self.cellular.search_name()
     self.assertEqual(res, 'eth0')
 def setUp(self):
     self.cellular = Cellular(connection=Mockup())
 def test_search_dns(self):
     self.cellular = Cellular(connection=Mockup())
     self.cellular.dhclient_info = self.filetext
     res = self.cellular.search_dns()
     self.assertEqual(res, ["8.8.8.58", "20.20.20.20", "40.40.4.1"])
Esempio n. 58
0
 def dig(self):
     areas = Cellular(self._map.size).initialize(40).update(
         5, 3, 5).areas().connect()
     for c in areas:
         self._map.put(c, '.')
     return self
Esempio n. 59
0
class Bricka:
    def __init__(self, driver_type=driverType, width=320, height=240):
        self.use_cellular_paddle = False
        self.use_cellular_brick = False
        self.font_height = 20
        self.back_color = SColor(255, 80, 80, 80)
        self.white = SColor(255, 255, 255, 255)
        self.brick_color = SColor(255, 200, 200, 0)
        self.ball_vel_default = position2di(2, -2)
        self.texture_paddle = None
        self.texture_brick = None
        self.help_dialog = None
        self.video_driver = None
        self.scene_manager = None
        self.gui_environment = None
        self.font_text = None
        self.font_chess = None
        self.skin = None
        p = SIrrlichtCreationParameters()
        p.DriverType = driverType
        p.WindowSize = dimension2du(width, height)
        p.AntiAlias = True
        p.WithAlphaChannel = True
        self.device = createDeviceEx(p)
        if self.device:
            self.device.setResizable(True)
            self.device.setWindowCaption(
                'bricka (a breakout clone by codeNtronix.com)')
            self.video_driver = self.device.getVideoDriver()
            self.scene_manager = self.device.getSceneManager()
            self.gui_environment = self.device.getGUIEnvironment()
            # icon
            if is_frozen():
                self.video_driver.SetIcon(101)
            else:
                self.video_driver.SetIcon()
            # skin
            self.skin = self.gui_environment.getSkin()
            for i in range(EGDC_COUNT):
                col = self.skin.getColor(i)
                col.setAlpha(200)
                self.skin.setColor(i, col)
                if (i + 2) > EGDC_COUNT:
                    break
            # font
            self.font = CGUITTFont(
                self.gui_environment,
                os.environ['SYSTEMROOT'] + '/Fonts/arial.ttf',
                self.font_height)
            if self.font:
                self.skin.setFont(self.font)
            # add 3d ball
            #~ self.ball3d = self.scene_manager.addSphereSceneNode(float(BALL_DIAMETER))
            # add camera for 3d view
            self.camera = self.scene_manager.addCameraSceneNode(
                position=vector3df(0, 0, -400))
            #~ self.camera = self.scene_manager.addCameraSceneNodeMaya(distance = 400)
            # initialize first level
            self.init_game()

    def offset_x(self, rect, value):
        rect.UpperLeftCorner.X += value
        rect.LowerRightCorner.X += value

    def offset_y(self, rect, value):
        rect.UpperLeftCorner.Y += value
        rect.LowerRightCorner.Y += value

    def offset(self, rect, x, y):
        self.offset_x(rect, x)
        self.offset_y(rect, y)

    def set_ball_x(self, value):
        self.ball.UpperLeftCorner.X = value
        self.ball.LowerRightCorner.X = value + BALL_DIAMETER

    def set_ball_y(self, value):
        self.ball.UpperLeftCorner.Y = value
        self.ball.LowerRightCorner.Y = value + BALL_DIAMETER

    def set_paddle_x(self, value):
        self.paddle.UpperLeftCorner.X = value
        self.paddle.LowerRightCorner.X = value + self.paddle_width

    def set_paddle_y(self, value):
        self.paddle.UpperLeftCorner.Y = value
        self.paddle.LowerRightCorner.Y = value + self.paddle_height

    def init_game(self):
        screen_size = self.video_driver.getScreenSize()
        self.brick_width = abs(screen_size.X / 11)
        self.brick_height = abs(screen_size.X / 32)
        self.paddle_width = 60
        self.paddle_height = 12
        self.max_paddle_x = screen_size.X - self.paddle_width
        self.max_ball_x = screen_size.X - BALL_DIAMETER
        self.max_ball_y = screen_size.Y - BALL_DIAMETER
        # Paddle X,Y coordinate
        self.paddle_x = (screen_size.X - self.paddle_width) / 2
        self.paddle_y = screen_size.Y - self.paddle_height - 10
        # ball X,Y coordinate
        self.ball_x = self.paddle_x
        self.ball_y = self.paddle_y - BALL_DIAMETER
        self.lives = 3
        self.score = 0
        self.state = STATE_BALL_IN_PADDLE
        self.paddle = recti(self.paddle_x, self.paddle_y,
                            self.paddle_x + self.paddle_width,
                            self.paddle_y + self.paddle_height)
        self.ball = recti(self.ball_x, self.ball_y,
                          self.ball_x + BALL_DIAMETER,
                          self.ball_y + BALL_DIAMETER)
        self.ball_vel = self.ball_vel_default
        #~ self.ball3d.setPosition(vector3df(self.ball_x, self.ball_y, 0))
        # cellular texture generator
        self.cell_paddle = Cellular(self.video_driver, self.paddle_width,
                                    self.paddle_height, 128)
        self.cell_brick = Cellular(self.video_driver, self.brick_width,
                                   self.brick_height, 128)
        if not self.texture_paddle:
            self.texture_paddle = self.cell_paddle.get_texture()
        else:
            self.texture_paddle = self.cell_paddle.get_new_texture(
                cellSize=8, density=4.0, rand_range_count=25)
        if not self.texture_brick:
            self.texture_brick = self.cell_brick.get_texture()
        else:
            self.texture_brick = self.cell_brick.get_new_texture(mFact=.5,
                                                                 lPower=.5)
        self.create_bricks()

    def show_stats(self):
        if self.font:
            text = 'SCORE: %d    LIVES: %d' % (self.score, self.lives)
            screen_size = self.video_driver.getScreenSize()
            text_dimension = self.font.getDimension(text)
            self.font.draw(
                text,
                recti((screen_size.X - text_dimension.Width) / 2, 5,
                      text_dimension.Width, self.font_height), self.white)

    def show_message(self, message):
        if self.font:
            screen_size = self.video_driver.getScreenSize()
            delta_y = 0
            for text in message:
                text_dimension = self.font.getDimension(text)
                self.font.draw(
                    text,
                    recti(
                        (screen_size.X - text_dimension.Width) / 2,
                        screen_size.Y / 2 + delta_y, text_dimension.Width,
                        (screen_size.Y - text_dimension.Height) / 2 + delta_y),
                    self.white)
                delta_y += text_dimension.Height

    def create_bricks(self):
        screen_size = self.video_driver.getScreenSize()
        x_delta = self.brick_width + 10
        count_rows = abs(screen_size.Y / 68)
        count_columns = abs(screen_size.X / x_delta - 1)
        x1 = (screen_size.X - x_delta * count_columns) / 2
        y_ofs = 35
        self.bricks = []
        for i in range(count_rows):
            x_ofs = x1
            for j in range(count_columns):
                self.bricks.append(
                    recti(x_ofs, y_ofs, x_ofs + self.brick_width,
                          y_ofs + self.brick_height))
                x_ofs += x_delta
            y_ofs += self.brick_height + 5

    def draw_bricks(self):
        for brick in self.bricks:
            if self.texture_brick and self.use_cellular_brick:
                self.video_driver.draw2DImage(self.texture_brick,
                                              brick.UpperLeftCorner)
            else:
                self.video_driver.draw2DRectangle(self.brick_color, brick)

    def move_ball(self):
        self.offset(self.ball, self.ball_vel.X, self.ball_vel.Y)
        if self.ball.UpperLeftCorner.X <= 0:
            self.set_ball_x(0)
            self.ball_vel.X = -self.ball_vel.X
        elif self.ball.UpperLeftCorner.X >= self.max_ball_x:
            self.set_ball_x(self.max_ball_x)
            self.ball_vel.X = -self.ball_vel.X
        if self.ball.UpperLeftCorner.Y < 0:
            self.set_ball_y(0)
            self.ball_vel.Y = -self.ball_vel.Y
        elif self.ball.UpperLeftCorner.Y >= self.max_ball_y:
            self.set_ball_y(self.max_ball_y)
            self.ball_vel.Y = -self.ball_vel.Y

    def handle_collisions(self):
        result = None
        for brick in self.bricks:
            if self.ball.isRectCollided(brick):
                self.score += 3
                self.ball_vel.Y = -self.ball_vel.Y
                self.bricks.remove(brick)
                result = brick
                break
        if len(self.bricks) == 0:
            self.state = STATE_WON
        if self.ball.isRectCollided(self.paddle):
            self.set_ball_y(self.paddle_y - BALL_DIAMETER)
            self.ball_vel.Y = -self.ball_vel.Y
        elif self.ball.UpperLeftCorner.Y > self.paddle.UpperLeftCorner.Y:
            self.lives -= 1
            if self.lives > 0:
                self.state = STATE_BALL_IN_PADDLE
            else:
                self.state = STATE_GAME_OVER
        return result

    def run(self):
        destroyed_brick = None
        destroyed_color1 = SColor(255, 0, 255, 0)
        destroyed_color2 = SColor(255, 255, 255, 0)
        destroyed_color3 = SColor(255, 0, 0, 255)
        destroyed_color4 = SColor(255, 255, 0, 0)
        color_red = SColor(255, 200, 0, 0)
        color_yellow = SColor(255, 200, 200, 0)
        color_green = SColor(255, 0, 200, 0)
        color_blue = SColor(255, 0, 0, 200)
        i_event_receiver = event_receiver()
        i_event_receiver.game = self
        self.device.setEventReceiver(i_event_receiver)
        self.device.getTimer().setSpeed(10.0)
        while self.device.run():
            if self.device.isWindowActive():
                if i_event_receiver.stop:
                    break
                if self.video_driver.beginScene(True, True, self.back_color):
                    if self.state == STATE_PLAYING:
                        if not self.help_dialog:
                            if self.device.getTimer().getTime() > 100:
                                self.move_ball()
                                self.device.getTimer().setTime(0)
                            pos = self.handle_collisions()
                            if pos:
                                destroyed_brick = pos
                            if destroyed_brick:
                                if self.use_cellular_brick:
                                    self.video_driver.draw2DRectangle(
                                        destroyed_color1, destroyed_brick)
                                else:
                                    self.video_driver.draw2DRectangle(
                                        destroyed_brick, destroyed_color1,
                                        destroyed_color2, destroyed_color3,
                                        destroyed_color4)
                                    destroyed_color2.a = destroyed_color2.a - 25
                                    destroyed_color3.a = destroyed_color3.a - 25
                                    destroyed_color4.a = destroyed_color4.a - 25
                                destroyed_color1.a = destroyed_color1.a - 25
                                if destroyed_color1.a < 50:
                                    destroyed_brick = None
                                    destroyed_color1.a = 255
                                    if not self.use_cellular_brick:
                                        destroyed_color2.a = 255
                                        destroyed_color3.a = 255
                                        destroyed_color4.a = 255
                    elif self.state == STATE_BALL_IN_PADDLE:
                        self.set_ball_x(self.paddle.UpperLeftCorner.X +
                                        self.paddle.getWidth() / 2)
                        self.set_ball_y(self.paddle.UpperLeftCorner.Y -
                                        self.ball.getHeight())
                        self.show_message(('PRESS SPACE', 'TO LAUNCH THE BALL',
                                           'F1 - help, ESC - exit'))
                    elif self.state == STATE_GAME_OVER:
                        self.show_message(
                            ('GAME OVER', 'PRESS ENTER TO PLAY AGAIN'))
                    elif self.state == STATE_WON:
                        self.show_message(
                            ('YOU WON!', 'PRESS ENTER TO PLAY AGAIN'))
                    self.draw_bricks()
                    # Draw paddle
                    if self.texture_paddle and self.use_cellular_paddle:
                        self.video_driver.draw2DImage(
                            self.texture_paddle, self.paddle.UpperLeftCorner)
                    else:
                        self.video_driver.draw2DRectangle(
                            self.paddle, color_yellow, color_red, color_green,
                            color_blue)
                    # Draw ball
                    #~ self.video_driver.draw2DRectangle(self.white, self.ball)
                    x1, y1 = self.ball.UpperLeftCorner.get_XY()
                    x2, y2 = self.ball.LowerRightCorner.get_XY()
                    self.video_driver.draw2DPolygon(
                        recti(x1 + ball_delta, y1 + ball_delta,
                              x2 + ball_delta, y2 + ball_delta), BALL_RADIUS,
                        self.white)
                    #~ ball_draw = self.ball + ball_delta
                    #~ self.video_driver.draw2DPolygon(ball_draw, BALL_RADIUS, self.white)
                    #~ self.ball3d.setPosition(vector3df(x1 + ball_delta, y1 + ball_delta, 0))
                    #~ self.scene_manager.drawAll()
                    self.show_stats()
                    if self.help_dialog:
                        self.gui_environment.drawAll()
                    self.video_driver.endScene()
                self.device.sleep(1)
            else:
                self.device._yield()
        self.device.closeDevice()
        self.device.drop()