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)