def test_pause_resume_wrong_id(server, https):

    version = 11

    service = server.get_service('collection-management-A')
    poll_service = server.get_service('poll-A')

    headers = prepare_headers(version, https)

    # Subscribing
    request = prepare_request(collection=COLLECTION_OPEN, action=ACT_SUBSCRIBE,
            version=version)

    response = service.process(headers, request)

    assert isinstance(response, as_tm(version).ManageCollectionSubscriptionResponse)
    assert response.collection_name == COLLECTION_OPEN

    assert len(response.subscription_instances) == 1
    subs = response.subscription_instances[0]

    assert subs.subscription_id
    assert subs.status == SS_ACTIVE

    # Pausing with wrong subscription ID
    with pytest.raises(exceptions.StatusMessageException):
        request = prepare_request(collection=COLLECTION_OPEN, action=ACT_PAUSE,
                subscription_id="RANDOM-WRONG-SUBSCRIPTION", version=version)
        response = service.process(headers, request)

    # Resuming with wrong subscription ID
    with pytest.raises(exceptions.StatusMessageException):
        request = prepare_request(collection=COLLECTION_OPEN, action=ACT_RESUME,
                subscription_id="RANDOM-WRONG-SUBSCRIPTION", version=version)
        response = service.process(headers, request)
예제 #2
0
    def setUpClass(cls):
        """Standart SetUpClass method of unittest.TestCase."""
        cls.api_rooms_url = 'http://makechat-web/api/rooms'
        cls.api_login_url = 'http://makechat-web/api/login'

        User.drop_collection()  # erase the users collection
        Room.drop_collection()  # erase the rooms collection

        cls.user = User.objects.create(
            username='******', email='*****@*****.**',
            password=encrypt_password('test'))

        cls.admin = User.objects.create(
            username='******', email='*****@*****.**',
            password=encrypt_password('admin'), is_superuser=True)

        res = make_request(prepare_request(
            cls.api_login_url, {'username': '******', 'password': '******'}))
        cls.user_session = res.headers['set-cookie'] \
            .split(';')[0].split('=')[1]

        res = make_request(prepare_request(
            cls.api_login_url, {'username': '******', 'password': '******'}))
        cls.admin_session = res.headers['set-cookie'] \
            .split(';')[0].split('=')[1]
예제 #3
0
    def test_1_create_token(self):
        """Attempt to create token."""
        res = make_request(prepare_request(
            self.api_tokens_url, {'name': 'token1'}, session=self.session))
        self.assertEqual(res.content.get('name'), 'token1')
        self.assertEqual(res.code, 201)

        res = make_request(prepare_request(
            self.api_tokens_url, {'name': 'token2'}, session=self.session))
        self.assertEqual(res.content.get('name'), 'token2')
        self.assertEqual(res.code, 201)
예제 #4
0
def test_unsubscribe(server, version, https):

    service = server.get_service('collection-management-A')
    headers = prepare_headers(version, https)

    params = dict(response_type=RT_FULL,
                  content_bindings=[CB_STIX_XML_111, CUSTOM_CONTENT_BINDING])

    # Subscribing
    request = prepare_request(collection=COLLECTION_OPEN,
                              action=ACT_SUBSCRIBE,
                              version=version,
                              params=params)

    response = service.process(headers, request)

    assert len(response.subscription_instances) == 1

    subs = response.subscription_instances[0]
    assert subs.subscription_id

    subscription_id = subs.subscription_id

    # Unsubscribing with invalid subscription ID should still
    # return valid response
    INVALID_ID = "RANDOM-WRONG-SUBSCRIPTION"
    request = prepare_request(collection=COLLECTION_OPEN,
                              action=ACT_UNSUBSCRIBE,
                              subscription_id=INVALID_ID,
                              version=version)
    response = service.process(headers, request)

    assert len(response.subscription_instances) == 1
    subs = response.subscription_instances[0]
    assert subs.subscription_id == INVALID_ID

    # Unsubscribing with valid subscription ID
    request = prepare_request(collection=COLLECTION_OPEN,
                              action=ACT_UNSUBSCRIBE,
                              subscription_id=subscription_id,
                              version=version)
    response = service.process(headers, request)

    assert len(response.subscription_instances) == 1
    subs = response.subscription_instances[0]
    assert subs.subscription_id == subscription_id

    if version == 11:
        assert subs.status == SS_UNSUBSCRIBED

    assert (server.persistence.get_subscription(subscription_id).status ==
            SS_UNSUBSCRIBED)
def test_unsubscribe(server, version, https):

    service = server.get_service('collection-management-A')
    headers = prepare_headers(version, https)

    params = dict(
        response_type=RT_FULL,
        content_bindings=[CB_STIX_XML_111, CUSTOM_CONTENT_BINDING]
    )

    # Subscribing
    request = prepare_request(
        collection=COLLECTION_OPEN, action=ACT_SUBSCRIBE,
        version=version, params=params)

    response = service.process(headers, request)

    assert len(response.subscription_instances) == 1

    subs = response.subscription_instances[0]
    assert subs.subscription_id

    subscription_id = subs.subscription_id

    # Unsubscribing with invalid subscription ID should still
    # return valid response
    INVALID_ID = "RANDOM-WRONG-SUBSCRIPTION"
    request = prepare_request(
        collection=COLLECTION_OPEN, action=ACT_UNSUBSCRIBE,
        subscription_id=INVALID_ID, version=version)
    response = service.process(headers, request)

    assert len(response.subscription_instances) == 1
    subs = response.subscription_instances[0]
    assert subs.subscription_id == INVALID_ID

    # Unsubscribing with valid subscription ID
    request = prepare_request(
        collection=COLLECTION_OPEN, action=ACT_UNSUBSCRIBE,
        subscription_id=subscription_id, version=version)
    response = service.process(headers, request)

    assert len(response.subscription_instances) == 1
    subs = response.subscription_instances[0]
    assert subs.subscription_id == subscription_id

    if version == 11:
        assert subs.status == SS_UNSUBSCRIBED

    assert (
        server.persistence.get_subscription(subscription_id).status ==
        SS_UNSUBSCRIBED)
예제 #6
0
    def test_2_invalid_creds(self):
        """Attempt to login with incorrect credentials."""
        # invalid password
        res = make_request(prepare_request(
            self.api_url, {'username': '******', 'password': '******'}))
        self.assertEqual(res.code, 401)

        # invalid username
        res = make_request(prepare_request(
            self.api_url, {'username': '******', 'password': '******'}))
        self.assertEqual(res.code, 401)

        # invalid username and password
        res = make_request(prepare_request(
            self.api_url, {'username': '******', 'password': '******'}))
        self.assertEqual(res.code, 401)
예제 #7
0
 def test_3_get_all_rooms(self):
     """Attempt to get all rooms."""
     res = make_request(prepare_request(
         self.api_rooms_url, {}, method='GET', session=self.admin_session))
     self.assertEqual(res.code, 200)
     self.assertEqual([
         x['name'] for x in res.content['items']], ['room1', 'room2'])
예제 #8
0
 def test_3_valid_form_data_email_exist(self):
     """Attempt to register with valid form data and existing email."""
     res = make_request(prepare_request(
         self.api_url, {'username': '******', 'email': '*****@*****.**',
                        'password1': 'test3', 'password2': 'test3'}))
     self.assertEqual(res.code, 400)
     self.assertEqual(res.content.get('description'),
                      'Email is already taken.')
def test_subscribe(server, version, https):

    service = server.get_service('collection-management-A')
    poll_service = server.get_service('poll-A')

    headers = prepare_headers(version, https)

    params = dict(
        response_type=RT_FULL,
        content_bindings=[CB_STIX_XML_111, CUSTOM_CONTENT_BINDING]
    )

    request = prepare_request(
        collection=COLLECTION_OPEN, action=ACT_SUBSCRIBE,
        version=version, params=params)

    response = service.process(headers, request)

    if version == 11:
        assert isinstance(
            response,
            as_tm(version).ManageCollectionSubscriptionResponse)
        assert response.collection_name == COLLECTION_OPEN
    else:
        assert isinstance(
            response,
            as_tm(version).ManageFeedSubscriptionResponse)
        assert response.feed_name == COLLECTION_OPEN

    assert response.message == SUBSCRIPTION_MESSAGE
    assert len(response.subscription_instances) == 1

    subs = response.subscription_instances[0]

    assert subs.subscription_id

    # 1 poll service * 2 protocol bindings
    assert len(subs.poll_instances) == 2
    assert (
        subs.poll_instances[0].poll_address ==
        poll_service.get_absolute_address(
            subs.poll_instances[0].poll_protocol))

    if version == 11:
        assert subs.status == SS_ACTIVE

        response_bindings = [
            b.binding_id
            for b in subs.subscription_parameters.content_bindings]

        assert response_bindings == params['content_bindings']
        assert (
            subs.subscription_parameters.response_type ==
            params['response_type'])
예제 #10
0
 def test_2_get_user_tokens(self):
     """Attempt to get user tokens."""
     res = make_request(prepare_request(
         self.api_tokens_url, {}, method='GET', session=self.session))
     self.assertEqual(res.code, 200)
     items = res.content['items']
     self.assertEqual(len(items), 2)
     self.assertEqual(items[0]['name'], 'token1')
     self.assertEqual(items[0]['user']['$oid'], str(self.user.pk))
     self.assertEqual(items[1]['name'], 'token2')
     self.assertEqual(items[1]['user']['$oid'], str(self.user.pk))
예제 #11
0
    def test_2_create_room_wit_admin_permissions(self):
        """Attempt to create room with admin permissions."""
        res = make_request(prepare_request(
            self.api_rooms_url, {'name': 'room1'}, session=self.admin_session))
        self.assertEqual(res.code, 201)
        self.assertEqual(res.content.get('name'), 'room1')
        self.assertEqual(res.content.get('members'), [
            {
                '$oid': str(
                    Member.objects.get(profile=self.admin, role='owner').id)
            }
        ])

        res = make_request(prepare_request(
            self.api_rooms_url, {'name': 'room2'}, session=self.admin_session))
        self.assertEqual(res.code, 201)
        self.assertEqual(res.content.get('name'), 'room2')
        self.assertEqual(res.content.get('members'), [
            {
                '$oid': str(
                    Member.objects.get(profile=self.admin, role='owner').id)
            }
        ])
예제 #12
0
def test_subscribe(server, version, https):

    service = server.get_service('collection-management-A')
    poll_service = server.get_service('poll-A')

    headers = prepare_headers(version, https)

    params = dict(response_type=RT_FULL,
                  content_bindings=[CB_STIX_XML_111, CUSTOM_CONTENT_BINDING])

    request = prepare_request(collection=COLLECTION_OPEN,
                              action=ACT_SUBSCRIBE,
                              version=version,
                              params=params)

    response = service.process(headers, request)

    if version == 11:
        assert isinstance(response,
                          as_tm(version).ManageCollectionSubscriptionResponse)
        assert response.collection_name == COLLECTION_OPEN
    else:
        assert isinstance(response,
                          as_tm(version).ManageFeedSubscriptionResponse)
        assert response.feed_name == COLLECTION_OPEN

    assert response.message == SUBSCRIPTION_MESSAGE
    assert len(response.subscription_instances) == 1

    subs = response.subscription_instances[0]

    assert subs.subscription_id

    # 1 poll service * 2 protocol bindings
    assert len(subs.poll_instances) == 2
    assert (subs.poll_instances[0].poll_address ==
            poll_service.get_absolute_address(
                subs.poll_instances[0].poll_protocol))

    if version == 11:
        assert subs.status == SS_ACTIVE

        response_bindings = [
            b.binding_id for b in subs.subscription_parameters.content_bindings
        ]

        assert response_bindings == params['content_bindings']
        assert (subs.subscription_parameters.response_type ==
                params['response_type'])
예제 #13
0
    def setUpClass(cls):
        """Standart SetUpClass method of unittest.TestCase."""
        cls.api_tokens_url = 'http://makechat-web/api/tokens'
        cls.api_login_url = 'http://makechat-web/api/login'

        User.drop_collection()  # erase the users collection
        Token.drop_collection()  # erase the tokens collection

        cls.user = User.objects.create(
            username='******', email='*****@*****.**',
            password=encrypt_password('test'))

        res = make_request(prepare_request(
            cls.api_login_url, {'username': '******', 'password': '******'}))
        cls.session = res.headers['set-cookie'].split(';')[0].split('=')[1]
예제 #14
0
    def test_4_invalid_form_data(self):
        """Attempt to register with invalid form data."""
        # username, email, password2 are misssing
        res = make_request(prepare_request(
            self.api_url, {'password1': 'test2'}))
        self.assertEqual(res.code, 400)
        self.assertEqual(res.content.get('title'), 'Missing parameter')

        # email, password2 are misssing
        res = make_request(prepare_request(
            self.api_url, {'username': '******', 'password1': 'test2'}))
        self.assertEqual(res.code, 400)
        self.assertEqual(res.content.get('title'), 'Missing parameter')

        # password2 is misssing
        res = make_request(prepare_request(
            self.api_url, {'username': '******', 'email': '*****@*****.**',
                           'password1': 'test2'}))
        self.assertEqual(res.code, 400)
        self.assertEqual(res.content.get('title'), 'Missing parameter')

        #  Passwords do not match
        res = make_request(prepare_request(
            self.api_url, {'username': '******', 'email': '*****@*****.**',
                           'password1': 'test2', 'password2': '2222'}))
        self.assertEqual(res.code, 400)
        self.assertEqual(res.content.get('description'),
                         'Passwords do not match.')

        #  Bad username string which contains non ASCII chars
        res = make_request(prepare_request(
            self.api_url, {'username': '******', 'email': '*****@*****.**',
                           'password1': 'test2', 'password2': 'test2'}))
        self.assertEqual(res.code, 400)
        self.assertEqual(res.content.get('description'),
                         "{'username': '******'}")

        #  Bad username string which contains non ASCII chars
        res = make_request(prepare_request(
            self.api_url, {'username': '******', 'email': 'test@a',
                           'password1': 'test2', 'password2': 'test2'}))
        self.assertEqual(res.code, 400)
        self.assertEqual(res.content.get('description'),
                         "{'email': 'Invalid Mail-address: test@a'}")
예제 #15
0
 def test_1_create_room_without_admin_permissions(self):
     """Attempt to create room without admin permissions."""
     res = make_request(prepare_request(
         self.api_rooms_url, {'name': 'room1'}, session=self.user_session))
     self.assertEqual(res.code, 403)
def test_subscribe_pause_resume(server, https):

    version = 11

    service = server.get_service('collection-management-A')

    headers = prepare_headers(version, https)

    params = dict(
        response_type=RT_FULL,
        content_bindings=[CB_STIX_XML_111, CUSTOM_CONTENT_BINDING]
    )

    # Subscribing
    request = prepare_request(
        collection=COLLECTION_OPEN, action=ACT_SUBSCRIBE,
        version=version, params=params)

    response = service.process(headers, request)

    assert isinstance(
        response,
        as_tm(version).ManageCollectionSubscriptionResponse)
    assert response.collection_name == COLLECTION_OPEN

    assert len(response.subscription_instances) == 1

    subs = response.subscription_instances[0]

    assert subs.status == SS_ACTIVE
    assert (
        server.persistence.get_subscription(subs.subscription_id).status ==
        SS_ACTIVE)

    # Pausing
    request = prepare_request(
        collection=COLLECTION_OPEN, action=ACT_PAUSE,
        subscription_id=subs.subscription_id, version=version)

    response = service.process(headers, request)

    assert isinstance(
        response,
        as_tm(version).ManageCollectionSubscriptionResponse)
    assert response.collection_name == COLLECTION_OPEN

    assert len(response.subscription_instances) == 1

    subs = response.subscription_instances[0]

    assert subs.subscription_id
    assert subs.status == SS_PAUSED
    assert (
        server.persistence.get_subscription(subs.subscription_id).status ==
        SS_PAUSED)

    # Resume
    request = prepare_request(
        collection=COLLECTION_OPEN, action=ACT_RESUME,
        subscription_id=subs.subscription_id, version=version)

    response = service.process(headers, request)

    assert isinstance(
        response,
        as_tm(version).ManageCollectionSubscriptionResponse)
    assert response.collection_name == COLLECTION_OPEN

    assert len(response.subscription_instances) == 1

    subs = response.subscription_instances[0]

    assert subs.subscription_id
    assert subs.status == SS_ACTIVE
    assert (
        server.persistence.get_subscription(subs.subscription_id).status ==
        SS_ACTIVE)
예제 #17
0
 def test_1_valid_form_data(self):
     """Attempt to register with valid form data."""
     res = make_request(prepare_request(
         self.api_url, {'username': '******', 'email': '*****@*****.**',
                        'password1': 'test2', 'password2': 'test2'}))
     self.assertEqual(res.code, 201)
예제 #18
0
 def test_1_ping_api_user_is_authenticated(self):
     """Attempt to ping api with successful authorization."""
     res = make_request(prepare_request(
         self.api_ping_url, {}, method='GET', session=self.user_session))
     self.assertEqual(res.code, 200)
예제 #19
0
def test_subscribe_pause_resume(server, https):

    version = 11

    service = server.get_service('collection-management-A')

    headers = prepare_headers(version, https)

    params = dict(response_type=RT_FULL,
                  content_bindings=[CB_STIX_XML_111, CUSTOM_CONTENT_BINDING])

    # Subscribing
    request = prepare_request(collection=COLLECTION_OPEN,
                              action=ACT_SUBSCRIBE,
                              version=version,
                              params=params)

    response = service.process(headers, request)

    assert isinstance(response,
                      as_tm(version).ManageCollectionSubscriptionResponse)
    assert response.collection_name == COLLECTION_OPEN

    assert len(response.subscription_instances) == 1

    subs = response.subscription_instances[0]

    assert subs.status == SS_ACTIVE
    assert (server.persistence.get_subscription(
        subs.subscription_id).status == SS_ACTIVE)

    # Pausing
    request = prepare_request(collection=COLLECTION_OPEN,
                              action=ACT_PAUSE,
                              subscription_id=subs.subscription_id,
                              version=version)

    response = service.process(headers, request)

    assert isinstance(response,
                      as_tm(version).ManageCollectionSubscriptionResponse)
    assert response.collection_name == COLLECTION_OPEN

    assert len(response.subscription_instances) == 1

    subs = response.subscription_instances[0]

    assert subs.subscription_id
    assert subs.status == SS_PAUSED
    assert (server.persistence.get_subscription(
        subs.subscription_id).status == SS_PAUSED)

    # Resume
    request = prepare_request(collection=COLLECTION_OPEN,
                              action=ACT_RESUME,
                              subscription_id=subs.subscription_id,
                              version=version)

    response = service.process(headers, request)

    assert isinstance(response,
                      as_tm(version).ManageCollectionSubscriptionResponse)
    assert response.collection_name == COLLECTION_OPEN

    assert len(response.subscription_instances) == 1

    subs = response.subscription_instances[0]

    assert subs.subscription_id
    assert subs.status == SS_ACTIVE
    assert (server.persistence.get_subscription(
        subs.subscription_id).status == SS_ACTIVE)
예제 #20
0
 def test_1_valid_creds(self):
     """Attempt to login with correct credentials."""
     res = make_request(prepare_request(
         self.api_url, {'username': '******', 'password': '******'}))
     self.assertEqual(res.code, 200)