def test_poll_get_content_count(server, https, count_blocks): version = 11 server.config['count_blocks_in_poll_responses'] = count_blocks service = server.get_service('poll-A') blocks_amount = 10 for i in range(blocks_amount): persist_content(server.persistence, COLLECTION_OPEN, service.id) headers = prepare_headers(version, https) # count-only request request = prepare_request(collection_name=COLLECTION_OPEN, count_only=True, version=version) response = service.process(headers, request) assert isinstance(response, tm11.PollResponse) if count_blocks: assert response.record_count.record_count == blocks_amount assert not response.record_count.partial_count assert len(response.content_blocks) == 0 else: assert response.record_count is None server.config['count_blocks_in_poll_responses'] = True
def test_poll_get_content_count(server, https, count_blocks): version = 11 server.config['count_blocks_in_poll_responses'] = count_blocks service = server.get_service('poll-A') blocks_amount = 10 for i in range(blocks_amount): persist_content(server.persistence, COLLECTION_OPEN, service.id) headers = prepare_headers(version, https) # count-only request request = prepare_request( collection_name=COLLECTION_OPEN, count_only=True, version=version) response = service.process(headers, request) assert isinstance(response, tm11.PollResponse) if count_blocks: assert response.record_count.record_count == blocks_amount assert not response.record_count.partial_count assert len(response.content_blocks) == 0 else: assert response.record_count is None server.config['count_blocks_in_poll_responses'] = True
def test_collections_volume(server, https): version = 11 service = server.get_service('collection-management-A') headers = prepare_headers(version, https) request = prepare_request(version) # querying empty collection response = service.process(headers, request) collection = next( c for c in response.collection_informations if c.collection_name == COLLECTION_OPEN) assert collection.collection_volume == 0 blocks_amount = 10 for i in range(blocks_amount): persist_content(server.persistence, COLLECTION_OPEN, service.id) # querying filled collection response = service.process(headers, request) collection = next( c for c in response.collection_informations if c.collection_name == COLLECTION_OPEN) assert collection.collection_volume == blocks_amount
def test_poll_fulfilment_request(server, https): version = 11 service = server.get_service('poll-A') blocks_amount = 30 for i in range(blocks_amount): persist_content(server.persistence, COLLECTION_OPEN, service.id) headers = prepare_headers(version, https) # first content request request = prepare_request(collection_name=COLLECTION_OPEN, version=version) response = service.process(headers, request) assert isinstance(response, tm11.PollResponse) assert response.record_count.record_count == POLL_MAX_COUNT assert response.record_count.partial_count is True assert len(response.content_blocks) == POLL_RESULT_SIZE assert response.more is True assert response.result_id # poll fullfilment request result_id = response.result_id part_number = 2 request = prepare_fulfilment_request( COLLECTION_OPEN, result_id, part_number) response = service.process(headers, request) assert isinstance(response, tm11.PollResponse) assert response.record_count.record_count == POLL_MAX_COUNT assert response.record_count.partial_count is True assert len(response.content_blocks) == (blocks_amount - POLL_RESULT_SIZE) assert not response.more assert response.result_id == result_id # poll fullfilment request over the top result_id = response.result_id part_number = 3 request = prepare_fulfilment_request( COLLECTION_OPEN, result_id, part_number) response = service.process(headers, request) assert isinstance(response, tm11.PollResponse) assert response.record_count.record_count == POLL_MAX_COUNT assert response.record_count.partial_count is True assert len(response.content_blocks) == 0 assert not response.more assert response.result_id == result_id
def test_subscribe_and_poll(server, version, https): server.config['count_blocks_in_poll_responses'] = True subs_service = server.get_service('collection-management-A') poll_service = server.get_service('poll-A') collection = COLLECTION_ONLY_STIX blocks_amount = 10 for i in range(blocks_amount): persist_content(server.persistence, collection, poll_service.id) headers = prepare_headers(version, https) params = dict( response_type=RT_COUNT_ONLY, content_bindings=[CB_STIX_XML_111, CUSTOM_CONTENT_BINDING]) subs_request = prepare_subscription_request( collection=collection, action=ACT_SUBSCRIBE, version=version, params=params) subs_response = subs_service.process(headers, subs_request) assert len(subs_response.subscription_instances) == 1 subscription = subs_response.subscription_instances[0] assert subscription.subscription_id # response type (count_only==False) should be ignored # for TAXII 1.1 requests poll_request = prepare_request( collection_name=collection, count_only=False, subscription_id=subscription.subscription_id, version=version) poll_response = poll_service.process(headers, poll_request) if version == 11: assert poll_response.record_count.record_count == blocks_amount assert not poll_response.record_count.partial_count assert len(poll_response.content_blocks) == 0 assert poll_response.subscription_id == subscription.subscription_id else: assert len(poll_response.content_blocks) == blocks_amount
def test_subscribe_and_poll(server, version, https): subs_service = server.get_service('collection-management-A') poll_service = server.get_service('poll-A') collection = COLLECTION_ONLY_STIX blocks_amount = 10 for i in range(blocks_amount): persist_content(server.persistence, collection, poll_service.id) headers = prepare_headers(version, https) params = dict( response_type=RT_COUNT_ONLY, content_bindings=[CB_STIX_XML_12, CUSTOM_CONTENT_BINDING] ) subs_request = prepare_subscription_request( collection=collection, action=ACT_SUBSCRIBE, version=version, params=params) subs_response = subs_service.process(headers, subs_request) assert len(subs_response.subscription_instances) == 1 subscription = subs_response.subscription_instances[0] assert subscription.subscription_id # response type (count_only==False) should be ignored # for TAXII 1.1 requests poll_request = prepare_request( collection_name=collection, count_only=False, subscription_id=subscription.subscription_id, version=version) poll_response = poll_service.process(headers, poll_request) if version == 11: assert poll_response.record_count.record_count == blocks_amount assert not poll_response.record_count.partial_count assert len(poll_response.content_blocks) == 0 assert poll_response.subscription_id == subscription.subscription_id else: assert len(poll_response.content_blocks) == blocks_amount
def test_poll_max_count_max_size(server, https, count_blocks): version = 11 server.config['count_blocks_in_poll_responses'] = count_blocks service = server.get_service('poll-A') blocks_amount = 30 for i in range(blocks_amount): persist_content(server.persistence, COLLECTION_OPEN, service.id) headers = prepare_headers(version, https) # count-only request request = prepare_request(collection_name=COLLECTION_OPEN, count_only=True, version=version) response = service.process(headers, request) assert isinstance(response, tm11.PollResponse) if count_blocks: assert response.record_count.record_count == POLL_MAX_COUNT else: assert response.record_count is None assert len(response.content_blocks) == 0 # content request request = prepare_request(collection_name=COLLECTION_OPEN, version=version) response = service.process(headers, request) assert isinstance(response, tm11.PollResponse) if count_blocks: assert response.record_count.record_count == POLL_MAX_COUNT assert response.record_count.partial_count is True assert len(response.content_blocks) == POLL_RESULT_SIZE else: assert response.record_count is None assert response.more is True assert response.result_id server.config['count_blocks_in_poll_responses'] = True
def test_poll_get_content(server, version, https): service = server.get_service('poll-A') original = persist_content( server.persistence, COLLECTION_ONLY_STIX, service.id, binding=CB_STIX_XML_12) # wrong collection headers = prepare_headers(version, https) request = prepare_request( collection_name=COLLECTION_STIX_AND_CUSTOM, version=version) response = service.process(headers, request) assert isinstance(response, as_tm(version).PollResponse) assert len(response.content_blocks) == 0 # right collection headers = prepare_headers(version, https) request = prepare_request( collection_name=COLLECTION_ONLY_STIX, version=version) response = service.process(headers, request) assert isinstance(response, as_tm(version).PollResponse) assert len(response.content_blocks) == 1 block = response.content_blocks[0] assert original.content == block.content assert original.timestamp_label == block.timestamp_label # right collection and request with wrong content_type headers = prepare_headers(version, https) request = prepare_request( collection_name=COLLECTION_ONLY_STIX, version=version, bindings=[CUSTOM_CONTENT_BINDING]) with pytest.raises(exceptions.StatusMessageException): service.process(headers, request)
def test_poll_get_content(server, version, https): service = server.get_service('poll-A') original = persist_content( server.persistence, COLLECTION_ONLY_STIX, service.id, binding=CB_STIX_XML_111) # wrong collection headers = prepare_headers(version, https) request = prepare_request( collection_name=COLLECTION_STIX_AND_CUSTOM, version=version) response = service.process(headers, request) assert isinstance(response, as_tm(version).PollResponse) assert len(response.content_blocks) == 0 # right collection headers = prepare_headers(version, https) request = prepare_request( collection_name=COLLECTION_ONLY_STIX, version=version) response = service.process(headers, request) assert isinstance(response, as_tm(version).PollResponse) assert len(response.content_blocks) == 1 block = response.content_blocks[0] assert original.content == block.content.encode('utf-8') assert original.timestamp_label == block.timestamp_label # right collection and request with wrong content_type headers = prepare_headers(version, https) request = prepare_request( collection_name=COLLECTION_ONLY_STIX, version=version, bindings=[CUSTOM_CONTENT_BINDING]) with pytest.raises(exceptions.StatusMessageException): service.process(headers, request)