예제 #1
0
    def setUp(self):
        self.resource_name = 'TestResource'

        super(ApiAccessTestCase, self).setUp()

        with self.app.test_request_context('/'):
            db.initialize()
            # Create some roles
            self.r1 = WBRoleModel(rolename='admin')
            db.session.add(self.r1)
            self.r2 = WBRoleModel(rolename='manager')
            db.session.add(self.r2)
            self.r3 = WBRoleModel(rolename='user')
            db.session.add(self.r3)
            db.session.commit()

            # Create some users
            self.u1 = WBUserModel(username='******', password='******', roles=[self.r1])
            db.session.add(self.u1)
            self.u2 = WBUserModel(username='******', password='******', roles=[self.r2])
            db.session.add(self.u2)
            self.u3 = WBUserModel(username='******', password='******', roles=[self.r3])
            db.session.add(self.u3)
            db.session.commit()

            self.u1 = self.u1.id
            self.u2 = self.u2.id
            self.u3 = self.u3.id

            self.r1 = self.r1.id
            self.r2 = self.r2.id
            self.r3 = self.r3.id
예제 #2
0
    def setUp(self):
        super(RecordAPITestCase, self).setUp()
        self.api = Api(self.app)

        with self.app.test_request_context('/'):
            db.initialize()
            # Create some roles
            self.r1 = WBRoleModel(rolename='admin')
            db.session.add(self.r1)
            self.r2 = WBRoleModel(rolename='manager')
            db.session.add(self.r2)
            self.r3 = WBRoleModel(rolename='user')
            db.session.add(self.r3)
            db.session.commit()

            # Create some users
            self.u1 = WBUserModel(username='******',
                                  password='******',
                                  roles=[self.r1])
            db.session.add(self.u1)
            self.u2 = WBUserModel(username='******',
                                  password='******',
                                  roles=[self.r2])
            db.session.add(self.u2)
            self.u3 = WBUserModel(username='******',
                                  password='******',
                                  roles=[self.r3])
            db.session.add(self.u3)
            db.session.commit()

            self.u1 = self.u1.id
            self.u2 = self.u2.id
            self.u3 = self.u3.id

            # Create some data
            self.d1 = MyTestModel(title='Alice in Wonderland',
                                  author='Lewis Caroll',
                                  owner_id=self.u1)
            db.session.add(self.d1)
            self.d2 = MyTestModel(title='SpongeBob',
                                  author='Stephen Hillenburg',
                                  owner_id=self.u2)
            db.session.add(self.d2)
            self.d3 = MyTestModel(title='Où est Charlie?',
                                  author='Martin Handford',
                                  owner_id=self.u3)
            db.session.add(self.d3)
            db.session.commit()

            self.d1 = self.d1.id
            self.d2 = self.d2.id
            self.d3 = self.d3.id
예제 #3
0
    def test_unique_name(self):
        """Test that we cannot add two users with the same username."""
        with self.app.test_request_context('/'):
            db.initialize()

            db.session.add(WBUserModel(username='******', password='******'))
            db.session.commit()

            db.session.add(WBUserModel(username='******', password='******'))
            self.assertRaises(IntegrityError, db.session.commit)
            db.session.rollback()

            # Check that duplicate password do not raise an exception.
            db.session.add(WBUserModel(username='******', password='******'))
            db.session.commit()
예제 #4
0
    def test_roles(self):
        """Test user role assignment."""
        with self.app.test_request_context('/'):
            db.initialize()

            user = WBUserModel(username='******', password='******')
            db.session.add(user)

            role_names = ['a', 'b', 'c', 'd']
            roles = []
            for r in role_names:
                role = WBRoleModel(rolename=r)
                db.session.add(role)
                user.roles.append(role)
                roles.append(role)
            db.session.commit()

            read_user = WBUserModel.query.get(user.id)
            self.assertEqual(read_user.roles, roles)

            read_user.roles.remove(roles[2])
            db.session.add(user)
            db.session.commit()
            read_user = WBUserModel.query.get(user.id)
            self.assertNotIn(roles[2], read_user.roles)
            self.assertIn(roles[3], read_user.roles)

            role = WBRoleModel(rolename='e')
            user.roles.append(role)
            db.session.add(user)
            db.session.commit()
            read_user = WBUserModel.query.get(user.id)
            self.assertIn(role, read_user.roles)
예제 #5
0
    def test_store_hashed_password(self):
        """Test that the password is stored as a hash."""
        with self.app.test_request_context('/'):
            password = self.str_n(1024)
            self.assertEqual(len(password), 1024)

            hashed_password = WBUserModel.hash_password(password)
            self.assertEqual(len(hashed_password), 64)

            db.initialize()
            user = WBUserModel(username='******', password=password)
            db.session.add(user)
            db.session.commit()
            read_user = WBUserModel.query.get(user.id)
            self.assertEqual(read_user.id, user.id)
            self.assertEqual(read_user.hashed_password, hashed_password)
예제 #6
0
    def test_field_limits(self):
        """Test that length limit on username is enforced."""
        with self.app.test_request_context('/'):
            db.initialize()

            long_username = self.str_n(51)
            self.assertEqual(len(long_username), 51)

            user = WBUserModel(username=long_username, password='******')
            db.session.add(user)
            if db.engine.name == 'mysql':
                self.assertRaises(Warning, db.session.commit)
                db.session.rollback()
            elif db.engine.name == 'postgresql':
                # FIXME: Should be
                # self.assertRaises(psycopg2.DataError,
                # db.session.commit), but does not work.
                self.assertRaises(Exception, db.session.commit)
                db.session.rollback()
            else:
                db.session.commit()

            user = WBUserModel.query.order_by(WBUserModel.id).first()
            if db.engine.name == 'sqlite':
                # sqlite ignore field length.
                self.assertEqual(user.username, long_username)
            else:
                self.assertIsNone(user)
예제 #7
0
    def setUp(self):
        super(SessionTestCase, self).setUp()

        add_session_management_urls(self.app)

        with self.app.test_request_context('/'):
            db.initialize()

            # Create a user
            self.u1 = WBUserModel(username='******', password='******', roles=[])
            db.session.add(self.u1)
            db.session.commit()

            self.u1 = self.u1.id
예제 #8
0
    def test_store_hashed_password(self):
        """Test that the password is stored as a hash."""
        with self.app.test_request_context('/'):
            password = self.str_n(1024)
            self.assertEqual(len(password), 1024)

            hashed_password = WBUserModel.hash_password(password)
            self.assertEqual(len(hashed_password), 64)

            db.initialize()
            user = WBUserModel(username='******', password=password)
            db.session.add(user)
            db.session.commit()
            read_user = WBUserModel.query.get(user.id)
            self.assertEqual(read_user.id, user.id)
            self.assertEqual(read_user.hashed_password, hashed_password)
예제 #9
0
    def setUp(self):
        super(AuthenticatorTestCase, self).setUp()

        add_session_management_urls(self.app)
        self.app.add_url_rule('/test',
                              'test',
                              needs_authenticated_user_function,
                              methods=['GET'])

        with self.app.test_request_context('/'):
            db.initialize()

            # Create a user
            self.u1 = WBUserModel(username='******', password='******', roles=[])
            db.session.add(self.u1)
            db.session.commit()

            self.u1 = self.u1.id
예제 #10
0
    def test_creation(self):
        with self.app.test_request_context('/'):
            db.initialize()
            user = WBUserModel(username='******', password='******')
            db.session.add(user)
            db.session.commit()

            session = WBSessionModel(user.id)
            db.session.add(session)
            db.session.commit()

            read_session = WBSessionModel.query.get(session.id)
            self.assertEqual(read_session.user_id, user.id)
            self.assertEqual(len(read_session.session_id),
                             2 * WBSessionModel.session_id_byte_length)
            self.assertEqual(len(read_session.secret),
                             2 * WBSessionModel.secret_byte_length)
            self.assertEqual(read_session.created, read_session.accessed)
            self.assertAlmostEqual(read_session.created,
                                   arrow.utcnow(),
                                   delta=timedelta(seconds=1))
예제 #11
0
    def test_touch(self):
        with self.app.test_request_context('/'):
            db.initialize()
            user = WBUserModel(username='******', password='******')
            db.session.add(user)
            db.session.commit()

            WBSessionModel.session_max_idle_time = 3
            session = WBSessionModel(user.id)
            db.session.add(session)
            db.session.commit()

            sleep(1)
            self.assertTrue(session.touch())
            read_session = WBSessionModel.query.get(session.id)
            self.assertTrue(read_session)
            self.assertNotEqual(read_session.created, read_session.accessed)
            self.assertNotAlmostEqual(read_session.created,
                                      arrow.utcnow(),
                                      delta=timedelta(seconds=1))
            self.assertAlmostEqual(read_session.accessed,
                                   arrow.utcnow(),
                                   delta=timedelta(seconds=2))

            sleep(1)
            self.assertTrue(session.touch())
            read_session = WBSessionModel.query.get(session.id)
            self.assertTrue(read_session)
            self.assertNotEqual(read_session.created, read_session.accessed)
            self.assertNotAlmostEqual(read_session.created,
                                      arrow.utcnow(),
                                      delta=timedelta(seconds=1))
            self.assertAlmostEqual(read_session.accessed,
                                   arrow.utcnow(),
                                   delta=timedelta(seconds=2))

            sleep(4)
            self.assertFalse(session.touch())
            read_session = WBSessionModel.query.get(session.id)
            self.assertFalse(read_session)
예제 #12
0
    def setUp(self):
        super(RecordAccessTestCase, self).setUp()
        with self.app.test_request_context('/'):
            db.initialize()

            # Create some roles
            self.r1 = WBRoleModel(rolename='admin')
            db.session.add(self.r1)
            self.r2 = WBRoleModel(rolename='manager')
            db.session.add(self.r2)
            self.r3 = WBRoleModel(rolename='user')
            db.session.add(self.r3)
            db.session.commit()

            # Create some users
            self.u1 = WBUserModel(username='******', password='******', roles=[self.r1])
            db.session.add(self.u1)
            self.u2 = WBUserModel(username='******', password='******', roles=[self.r2])
            db.session.add(self.u2)
            self.u3 = WBUserModel(username='******', password='******', roles=[self.r3])
            db.session.add(self.u3)
            db.session.commit()

            self.u1 = self.u1.id
            self.u2 = self.u2.id
            self.u3 = self.u3.id

            self.r1 = self.r1.id
            self.r2 = self.r2.id
            self.r3 = self.r3.id

            # Create some data
            self.d1 = MyModel(title='a', owner_id=self.u1)
            db.session.add(self.d1)
            self.d2 = MyModel(title='a', owner_id=self.u1)
            db.session.add(self.d2)
            self.d3 = MyModel(title='a', owner_id=self.u2)
            db.session.add(self.d3)
            self.d4 = MyModel(title='a', owner_id=self.u3)
            db.session.add(self.d4)
            db.session.commit()

            self.d1 = self.d1.id
            self.d2 = self.d2.id
            self.d3 = self.d3.id
            self.d4 = self.d4.id

            # Add some access control records
            anon = WBRoleModel.get_anonymous_role_id()

            db.session.add_all(
                make_record_acl(
                    record_types=['My'],
                    record_ids=[self.d1, self.d2, self.d3, self.d4],
                    user_role_ids=[self.r1],
                    permissions=['read', 'update', 'delete']))

            db.session.add_all(
                make_record_acl(
                    record_types=['My'],
                    record_ids=[self.d1, self.d2, self.d3, self.d4],
                    user_role_ids=[self.r2],
                    permissions=['read']))

            db.session.add_all(
                make_record_acl(record_types=['My'],
                                record_ids=[self.d3, self.d4],
                                user_role_ids=[self.r2],
                                permissions=['update', 'delete']))

            db.session.add_all(
                make_record_acl(
                    record_types=['My'],
                    record_ids=[self.d1, self.d2, self.d3, self.d4],
                    user_role_ids=[self.r3],
                    permissions=['read']))

            db.session.add_all(
                make_record_acl(record_types=['My'],
                                record_ids=[self.d3, self.d4],
                                user_role_ids=[anon],
                                permissions=['read']))
            db.session.commit()