Beispiel #1
0
class AcessCameraTest(unittest.TestCase):

    def setUp(self):
        self.tearDown()

        self.client = Client()

        self.camera_type_axis = CameraType(
            name='Axis',
            driver='axis.AxisDriver',
            is_controlled=False,
        )
        self.camera_type_axis.save()
        self.camera_type_axis_manage = CameraType(
            name='Axis Manage',
            driver='axis.AxisDriver',
            is_controlled=True,
        )
        self.camera_type_axis_manage.save()

        self.tariff_view_package = Tariff(
            name='View Package 1 min',
            description='View Package Description...',
            cost=1.0,
            duration=2,
            is_controlled=False,
        )
        self.tariff_view_package.save()

        self.tariff_view_time = Tariff(
            name='View Package Time',
            description='View Package Description...',
            cost=1.0,
            is_controlled=False,
        )
        self.tariff_view_time.save()

        self.tariff_manage_package = Tariff(
            name='Manage Package 1 min',
            description='Manage Package Description...',
            cost=2.0,
            duration=2,
            is_controlled=True,
        )
        self.tariff_manage_package.save()

        self.tariff_manage_time = Tariff(
            name='Manage Package Time',
            description='Manage Package Description...',
            cost=2.0,
            is_controlled=True,
        )
        self.tariff_manage_time.save()

        for i in xrange(1, 4):
            user = User.create_user(email='*****@*****.**' % i, password='******')
            user.cash = 1000000.0
            user.save()
            camera = Camera(
                name='Test Billing Camera %i' % i,
                owner=user,
                type=self.camera_type_axis_manage,
                stream_name='boston',
                camera_management_host='localhost.boston.com',
                camera_management_username='******',
                camera_management_password='******',
                is_view_enabled=True,
                is_view_public=True,
                is_view_paid=True,
                is_management_enabled=True,
                is_management_public=True,
                is_management_paid=True,
                is_managed=True,
                management_packet_tariff=self.tariff_manage_package,
                management_time_tariff=self.tariff_manage_time,
                view_packet_tariff=self.tariff_view_package,
                view_time_tariff=self.tariff_view_time,
            )
            camera.save()

    def tearDown(self):
        CameraType.objects.delete()
        Tariff.objects.delete()
        Camera.objects.delete()
        AccessCamOrder.objects.delete()
        User.objects.delete()

    def test_access_view_package(self):
        def get_access():
            user = User.objects.get(email='*****@*****.**')
            camera = Camera.objects.get(name='Test Billing Camera 2')
            return AccessCamOrder.create_packet_type(
                tariff=self.tariff_view_package,
                count_packets=1,
                user=user,
                camera=camera,
            )

        order = get_access()

        self.assertEqual(order.can_access(), True)
        time.sleep(1)
        self.assertEqual(order.can_access(), True)
        time.sleep(1)
        self.assertEqual(order.can_access(), False)

        get_access() # 2 sec
        get_access() # 4 sec
        get_access() # 6 sec

        camera = Camera.objects.get(name='Test Billing Camera 2')
        user_payed = User.objects.get(email='*****@*****.**')
        user_owner = User.objects.get(email='*****@*****.**')
        user_other = User.objects.get(email='*****@*****.**')

        self.assertEqual(camera.billing(user_payed)['can_show'], True)
        self.assertEqual(camera.billing(user_owner)['can_show'], True)
        self.assertEqual(camera.billing(user_other)['can_show'], False)
        time.sleep(4)
        self.assertEqual(camera.billing(user_payed)['can_show'], True)
        self.assertEqual(camera.billing(user_owner)['can_show'], True)
        self.assertEqual(camera.billing(user_other)['can_show'], False)
        time.sleep(4)
        self.assertEqual(camera.billing(user_payed)['can_show'], False)
        self.assertEqual(camera.billing(user_owner)['can_show'], True)
        self.assertEqual(camera.billing(user_other)['can_show'], False)

    def test_access_view_time(self):
        def get_access():
            user = User.objects.get(email='*****@*****.**')
            camera = Camera.objects.get(name='Test Billing Camera 2')
            return AccessCamOrder.create_time_type(
                tariff=self.tariff_view_time,
                user=user,
                camera=camera,
            )

        def view_notify(camera_id, status):
            params = dict(
                status=status,
                session_key=self.client.session.session_key,
                camera_id=camera_id,
                time=settings.TIME_INTERVAL_NOTIFY,
            )
            response = self.client.get('%s?%s' % (reverse('server_api:cam_view_notify', args=['txt']), urllib.urlencode(params)))
            status, time, stream = response.content.split('|')
            self.assertEqual(status, '0')


        self.client.login(email='*****@*****.**', password='******')

        order = get_access()

        self.failUnlessRaises(AccessCamOrder.CanNotAddOrder, get_access)
        
        view_notify(order.camera.id, 'connect')
        order.reload()
        self.assertEqual(order.can_access(), True)
        time.sleep(settings.TIME_INTERVAL_NOTIFY)
        view_notify(order.camera.id, 'next')
        order.reload()
        self.assertEqual(order.can_access(), True)
        time.sleep(settings.TIME_INTERVAL_NOTIFY)
        view_notify(order.camera.id, 'disconnect')
        order.reload()
        self.assertEqual(order.can_access(), False)