def test_created_related_actions_multiple_subscribers(self):

        collection_name = "sharing_collection"
        subscribers = [self.__subscriber_id, self.__second_subscriber]
        sharing_secret = self.__create_sharing_record(subscribers, collection_name)
        subscribers.append(self.__account_id)

        file = open("../test_resources/XooML.xml")
        manifest_action = UpdateSharedManifestAction(self.__account_id, collection_name, file)
        SharingActionFactory.create_related_sharing_actions(sharing_secret, manifest_action, callback=self.stop)
        sharing_action_list = self.wait()

        self.assertEqual(3, len(sharing_action_list))

        for sharing_action in sharing_action_list:
            user_id = sharing_action.get_user_id()
            self.assertTrue(user_id in subscribers)
            subscribers.remove(user_id)
            self.assertEqual(SharingEvent.UPDATE_MANIFEST, sharing_action.get_action_type())
        self.assertEqual(0, len(subscribers))

        # cleanup
        SharingController.remove_sharing_record_by_secret(sharing_secret, callback=self.stop)
        self.wait()
        for sharing_action in sharing_action_list:
            user_id = sharing_action.get_user_id()
            collection_name = sharing_action.get_collection_name()
            StorageServer.remove_collection(user_id, collection_name, callback=self.stop)
            self.wait()
    def test_remove_all_subscribers(self):

        collection_name = "shareable_collection"
        file = open("../test_resources/XooML.xml")
        StorageServer.add_collection(
            user_id=self.__account_id, collection_name=collection_name, callback=self.stop, file=file
        )
        response = self.wait()

        self.assertEqual(StorageResponse.OK, response)

        SharingController.create_sharing_record(self.__account_id, collection_name, callback=self.stop)
        sharing_secret = self.wait()

        SharingController.subscribe_to_sharing_space(self.__subscriber_id, sharing_secret, callback=self.stop)
        collection_name2 = self.wait(timeout=500)

        SharingController.remove_all_subscribers(sharing_secret, callback=self.stop)
        self.wait(timeout=10000)

        # busy wait for the results of remove all subscribers to become consistent
        try:
            self.wait(timeout=5)
        except Exception:
            pass

        SharingController.get_sharing_secret_from_subscriber_info(
            self.__account_id, collection_name, callback=self.stop
        )
        actual_sharing_secret = self.wait()
        self.assertTrue(actual_sharing_secret is None)
        SharingController.get_sharing_secret_from_subscriber_info("second_user", collection_name2, callback=self.stop)
        actual_sharing_secret = self.wait()
        self.assertTrue(actual_sharing_secret is None)
    def test_create_related_actions_update_thumbnail(self):

        collection_name = "sharing_collection"
        subscribers = [self.__subscriber_id]
        sharing_secret = self.__create_sharing_record(subscribers, collection_name)
        subscribers.append(self.__account_id)

        file = open("../test_resources/XooML.xml")
        thumbnail_action = UpdateSharedThumbnailAction(self.__account_id, collection_name, file)
        SharingActionFactory.create_related_sharing_actions(sharing_secret, thumbnail_action, callback=self.stop)
        sharing_action_list = self.wait()

        self.assertEqual(2, len(sharing_action_list))

        for sharing_action in sharing_action_list:
            user_id = sharing_action.get_user_id()
            thumbnail_file = sharing_action.get_associated_file()
            self.assertTrue(thumbnail_file is not None)
            self.assertTrue(user_id in subscribers)
            subscribers.remove(user_id)
            self.assertEqual(SharingEvent.UPDATE_THUMBNAIL, sharing_action.get_action_type())
        self.assertEqual(0, len(subscribers))

        # cleanup
        SharingController.remove_sharing_record_by_secret(sharing_secret, callback=self.stop)
        self.wait()
        for sharing_action in sharing_action_list:
            user_id = sharing_action.get_user_id()
            collection_name = sharing_action.get_collection_name()
            StorageServer.remove_collection(user_id, collection_name, callback=self.stop)
            self.wait()
    def test_get_sharing_space_info_existing(self):

        servers = ['a', 'b', 'c']
        Properties.sharing_space_servers = servers
        collection_name = str(uuid.uuid4())
        subscriber_list = [self.__subscriber_id, self.__second_subscriber_id]
        sharing_secret, subscribers_collections =\
        self.__create_sharing_record(subscriber_list, collection_name)
        load_balancer = SharingLoadBalancer.get_instance()
        load_balancer.get_sharing_space_info(sharing_secret, callback=self.stop)
        server_info = self.wait()
        server_adrs = server_info['server']
        self.assertTrue(server_adrs in servers)

        load_balancer.get_sharing_space_info(sharing_secret, callback=self.stop)
        second_server_info = self.wait()
        second_server_adrs = second_server_info['server']
        self.assertEqual(server_adrs, second_server_adrs)

        #cleanup
        SharingController.remove_sharing_record_by_secret(sharing_secret, callback =self.stop)
        self.wait()
        StorageServer.remove_collection(self.__account_id, collection_name,
            callback=self.stop)
        for subscriber_id in subscribers_collections:
            subscriber_collection = subscribers_collections[subscriber_id]
            StorageServer.remove_collection(subscriber_id, subscriber_collection,
                callback=self.stop)
            self.wait()
    def test_create_related_actions_update_note_img(self):

        collection_name = "sharing_collection"
        subscribers = [self.__subscriber_id]
        sharing_secret = self.__create_sharing_record(subscribers, collection_name)
        subscribers.append(self.__account_id)

        note_name = "lala_note"
        file = open("../test_resources/XooML.xml")
        note_img_action = UpdateSharedNoteImageAction(self.__account_id, collection_name, note_name, file)
        SharingActionFactory.create_related_sharing_actions(sharing_secret, note_img_action, callback=self.stop)
        sharing_action_list = self.wait()

        self.assertEqual(2, len(sharing_action_list))

        for sharing_action in sharing_action_list:
            user_id = sharing_action.get_user_id()
            actual_note_name = sharing_action.get_note_name()
            self.assertEqual(note_name, actual_note_name)
            self.assertTrue(user_id in subscribers)
            subscribers.remove(user_id)
            self.assertEqual(SharingEvent.UPDATE_NOTE_IMG, sharing_action.get_action_type())
        self.assertEqual(0, len(subscribers))

        # cleanup
        SharingController.remove_sharing_record_by_secret(sharing_secret, callback=self.stop)
        self.wait()
        for sharing_action in sharing_action_list:
            user_id = sharing_action.get_user_id()
            collection_name = sharing_action.get_collection_name()
            StorageServer.remove_collection(user_id, collection_name, callback=self.stop)
            self.wait()
    def test_get_sharing_space_server_existing(self):

        collection_name = str(uuid.uuid4())
        subscriber_list = [self.__subscriber_id, self.__second_subscriber_id]
        sharing_secret, subscribers_collections =\
        self.__create_sharing_record(subscriber_list, collection_name)

        joker = JokerHelper.get_instance()
        joker.get_sharing_space_server(sharing_secret, callback=self.stop)
        server_adrs1 = self.wait(timeout=10000)
        self.assertIn(server_adrs1, Properties.sharing_space_servers)
        print server_adrs1


        joker.get_sharing_space_server(sharing_secret, callback=self.stop)
        server_adrs2 = self.wait(timeout=10000)
        self.assertIn(server_adrs2, Properties.sharing_space_servers)
        self.assertEqual(server_adrs1, server_adrs2)
        print server_adrs2

        #cleanup
        SharingController.remove_sharing_record_by_secret(sharing_secret, callback =self.stop)
        self.wait()
        StorageServer.remove_collection(self.__account_id, collection_name,
            callback=self.stop)
        for subscriber_id in subscribers_collections:
            subscriber_collection = subscribers_collections[subscriber_id]
            StorageServer.remove_collection(subscriber_id, subscriber_collection,
                callback=self.stop)
            self.wait()
    def test_create_related_actions_delete_note(self):

        collection_name = "sharing_collection"
        subscribers = [self.__subscriber_id]
        sharing_secret = self.__create_sharing_record(subscribers, collection_name)
        subscribers.append(self.__account_id)

        note_name = "lala note"
        delete_action = DeleteSharedNoteAction(self.__account_id, collection_name, note_name)

        SharingActionFactory.create_related_sharing_actions(sharing_secret, delete_action, callback=self.stop)
        sharing_action_list = self.wait()

        self.assertEqual(2, len(sharing_action_list))

        for sharing_action in sharing_action_list:
            user_id = sharing_action.get_user_id()
            actual_note_name = sharing_action.get_note_name()
            note_file = sharing_action.get_associated_file()
            self.assertTrue(note_file is None)
            self.assertEqual(note_name, actual_note_name)
            self.assertTrue(user_id in subscribers)
            subscribers.remove(user_id)
            self.assertEqual(SharingEvent.DELETE_NOTE, sharing_action.get_action_type())
        self.assertEqual(0, len(subscribers))

        # cleanup
        SharingController.remove_sharing_record_by_secret(sharing_secret, callback=self.stop)
        self.wait()
        for sharing_action in sharing_action_list:
            user_id = sharing_action.get_user_id()
            collection_name = sharing_action.get_collection_name()
            StorageServer.remove_collection(user_id, collection_name, callback=self.stop)
            self.wait()
    def __create_sharing_record(self, subscriber_list, collection_name):

        #create collection
        file = open('../test_resources/XooML.xml')
        StorageServer.add_collection(user_id=self.__account_id,
            collection_name= collection_name, callback=self.stop, file= file)
        response = self.wait()
        self.assertEqual(StorageResponse.OK, response)

        #create sharing record
        SharingController.create_sharing_record(self.__account_id,
            collection_name, callback = self.stop)
        sharing_secret = self.wait(timeout=10000)
        self.assertTrue(sharing_secret is not None)

        subscribers = {}
        for subscriber_id in subscriber_list:
            #subscribe
            SharingController.subscribe_to_sharing_space(subscriber_id,
                sharing_secret, callback = self.stop)
            subscribers_collection_name  = self.wait()
            self.assertTrue(subscribers_collection_name is not None)
            subscribers[subscriber_id] = subscribers_collection_name

        return sharing_secret, subscribers
    def test_reshare_already_shared_collection(self):

        # create collection
        first_collection_name = "shareable_collection"
        file = open("../test_resources/XooML.xml")
        StorageServer.add_collection(
            user_id=self.__account_id, collection_name=first_collection_name, callback=self.stop, file=file
        )
        response = self.wait()
        self.assertEqual(StorageResponse.OK, response)

        # create sharing record
        SharingController.create_sharing_record(self.__account_id, first_collection_name, callback=self.stop)
        sharing_secret = self.wait()
        self.assertTrue(sharing_secret is not None)

        # duplicate create sharing record
        SharingController.create_sharing_record(self.__account_id, first_collection_name, callback=self.stop)
        new_sharing_secret = self.wait()
        self.assertEqual(sharing_secret, new_sharing_secret)

        # verify that only one sharing record was added
        SharingController.get_sharing_record_by_owner_info(self.__account_id, first_collection_name, callback=self.stop)
        sharing_record = self.wait()
        subscribers_list = sharing_record.get_subscribers()
        self.assertEqual(1, len(subscribers_list))

        # cleanup
        SharingController.remove_sharing_record_by_secret(sharing_secret, callback=self.stop)
        self.wait()
        StorageServer.remove_collection(self.__account_id, first_collection_name, callback=self.stop)
        self.wait()
    def test_delete_note(self):

        collection_name = str(uuid.uuid4())
        subscriber_list = [self.__subscriber_id]
        sharing_secret, subscribers_collections =\
        self.__create_sharing_record(subscriber_list, collection_name)


        joker = JokerHelper.get_instance()
        joker.get_sharing_space_server(sharing_secret, callback=self.stop)
        server_adrs = self.wait(timeout=10000)
        self.assertIn(server_adrs, Properties.sharing_space_servers)

        note_file = open('../test_resources/sharing_template1.xml')
        note_name = str(uuid.uuid4())
        joker.update_note(server_adrs, sharing_secret,
            self.__account_id, collection_name, note_name, note_file, callback=self.stop)
        result = self.wait(timeout=1000)
        self.assertEqual(StorageResponse.OK,result)

        #wait for a while
        self.__wait(10)

        #now delete
        joker.delete_note(server_adrs, sharing_secret, self.__account_id,
            collection_name, note_name, callback=self.stop)
        response = self.wait()
        self.assertEqual(StorageResponse.OK, response)

        #wait for a while
        self.__wait(10)

        #Now Try to retreive the note
        StorageServer.get_note_from_collection(self.__account_id,
            collection_name, note_name, callback=self.stop)
        response = self.wait()
        self.assertTrue(response is None)

        #cleanup
        SharingController.remove_sharing_record_by_secret(sharing_secret, callback =self.stop)
        self.wait()
        StorageServer.remove_collection(self.__account_id, collection_name,
            callback=self.stop)
        for subscriber_id in subscribers_collections:
            subscriber_collection = subscribers_collections[subscriber_id]
            StorageServer.remove_collection(subscriber_id, subscriber_collection,
                callback=self.stop)
            self.wait()
    def test_update_manifest(self):

        collection_name = str(uuid.uuid4())
        subscriber_list = [self.__subscriber_id]
        sharing_secret, subscribers_collections =\
        self.__create_sharing_record(subscriber_list, collection_name)


        joker = JokerHelper.get_instance()
        joker.get_sharing_space_server(sharing_secret, callback=self.stop)
        server_adrs = self.wait(timeout=10000)
        self.assertIn(server_adrs, Properties.sharing_space_servers)

        manifest_file = open('../test_resources/sharing_template1.xml')
        expected_manifest_body = manifest_file.read()
        joker.update_manifest(server_adrs, sharing_secret, self.__account_id,
            collection_name, manifest_file, callback=self.stop)
        response = self.wait(timeout=1000)
        self.assertEqual(StorageResponse.OK, response)

        #wait for a while
        self.__wait(10)

        #try to retrieve the file
        StorageServer.get_collection_manifest(self.__account_id, collection_name,
            callback=self.stop)
        actual_manifest_file = self.wait()
        actual_manifest_body = actual_manifest_file.read()
        self.assertEqual(actual_manifest_body, expected_manifest_body)

        #cleanup
        SharingController.remove_sharing_record_by_secret(sharing_secret, callback =self.stop)
        self.wait()
        StorageServer.remove_collection(self.__account_id, collection_name,
            callback=self.stop)
        for subscriber_id in subscribers_collections:
            subscriber_collection = subscribers_collections[subscriber_id]
            StorageServer.remove_collection(subscriber_id, subscriber_collection,
                callback=self.stop)
            self.wait()
    def test_add_subscriber(self):

        # create collection
        first_collection_name = "shareable_collection"
        file = open("../test_resources/XooML.xml")
        StorageServer.add_collection(
            user_id=self.__account_id, collection_name=first_collection_name, callback=self.stop, file=file
        )
        response = self.wait()
        self.assertEqual(StorageResponse.OK, response)

        # create sharing record
        SharingController.create_sharing_record(self.__account_id, first_collection_name, callback=self.stop)
        sharing_secret = self.wait(timeout=10000)
        self.assertTrue(sharing_secret is not None)

        # subscribe
        SharingController.subscribe_to_sharing_space(self.__subscriber_id, sharing_secret, callback=self.stop)
        subscribers_collection_name = self.wait()
        self.assertTrue(subscribers_collection_name is not None)

        # verify
        SharingController.get_sharing_record_by_secret(sharing_secret, callback=self.stop)
        sharing_record = self.wait()
        subscribers_list = sharing_record.get_subscribers()
        self.assertTrue([self.__subscriber_id, subscribers_collection_name] in subscribers_list)
        # verify subscriber collection
        SharingController.get_sharing_secret_from_subscriber_info(
            self.__subscriber_id, subscribers_collection_name, callback=self.stop
        )
        actual_sharing_secret = self.wait()
        self.assertEqual(sharing_secret, actual_sharing_secret)
        # cleanup
        SharingController.remove_sharing_record_by_secret(sharing_secret, callback=self.stop)
        self.wait()
        StorageServer.remove_collection(self.__account_id, first_collection_name, callback=self.stop)
        self.wait()
        StorageServer.remove_collection(self.__subscriber_id, subscribers_collection_name, callback=self.stop)
        self.wait()
    def test_invalid_user_unsubscribing(self):

        # create collection
        first_collection_name = "shareable_collection"
        file = open("../test_resources/XooML.xml")
        StorageServer.add_collection(
            user_id=self.__account_id, collection_name=first_collection_name, callback=self.stop, file=file
        )
        response = self.wait()
        self.assertEqual(StorageResponse.OK, response)

        # create sharing record
        SharingController.create_sharing_record(self.__account_id, first_collection_name, callback=self.stop)
        sharing_secret = self.wait()
        self.assertTrue(sharing_secret is not None)

        # subscribe
        SharingController.subscribe_to_sharing_space(self.__subscriber_id, sharing_secret, callback=self.stop)
        subscribers_collection_name = self.wait()
        self.assertTrue(subscribers_collection_name is not None)

        # invalid unsubscribe
        SharingController.unsubscribe_from_sharing_space("dummy", first_collection_name, callback=self.stop)
        response = self.wait()
        self.assertEqual(StorageResponse.NOT_FOUND, response)

        # verify unsubscribe
        SharingController.get_sharing_record_from_subscriber_info(
            "dummy", subscribers_collection_name, callback=self.stop
        )
        sharing_record = self.wait()
        self.assertTrue(sharing_record is None)

        # cleanup
        SharingController.remove_sharing_record_by_secret(sharing_secret, callback=self.stop)
        self.wait()
        StorageServer.remove_collection(self.__account_id, first_collection_name, callback=self.stop)
        self.wait()
        StorageServer.remove_collection(self.__subscriber_id, subscribers_collection_name, callback=self.stop)
    def test_update_thumbnail(self):

        collection_name = str(uuid.uuid4())
        subscriber_list = [self.__subscriber_id]
        sharing_secret, subscribers_collections =\
        self.__create_sharing_record(subscriber_list, collection_name)


        joker = JokerHelper.get_instance()
        joker.get_sharing_space_server(sharing_secret, callback=self.stop)
        server_adrs = self.wait(timeout=10000)
        self.assertIn(server_adrs, Properties.sharing_space_servers)

        thumbnail_file = open('../test_resources/note_img.jpg')
        joker.update_thumbnail(server_adrs, sharing_secret, self.__account_id,
            collection_name, thumbnail_file, callback=self.stop)
        response = self.wait()
        self.assertEqual(StorageResponse.OK, response)

        #wait for a while
        self.__wait(10)

        #try to retreive the thumbnail
        StorageServer.get_thumbnail(self.__account_id, collection_name,
            callback=self.stop)
        response = self.wait()
        self.assertTrue(response is not None)

        #cleanup
        SharingController.remove_sharing_record_by_secret(sharing_secret, callback =self.stop)
        self.wait()
        StorageServer.remove_collection(self.__account_id, collection_name,
            callback=self.stop)
        for subscriber_id in subscribers_collections:
            subscriber_collection = subscribers_collections[subscriber_id]
            StorageServer.remove_collection(subscriber_id, subscriber_collection,
                callback=self.stop)
            self.wait()
 def test_remove_sharing_record_by_owner_info(self):
     collection_name = "test_collection_name"
     SharingController.create_sharing_record(self.__account_id, collection_name, callback=self.stop)
     sharing_secret = self.wait()
     self.assertTrue(sharing_secret is not None)
     SharingController.remove_sharing_record_by_owner_info(self.__account_id, collection_name, callback=self.stop)
     self.wait(timeout=10)
     # verify
     SharingController.get_sharing_record_by_secret(sharing_secret, callback=self.stop)
     sharing_record = self.wait()
     self.assertTrue(sharing_record is None)
     # verify subscriber collection
     SharingController.get_sharing_secret_from_subscriber_info(
         self.__account_id, collection_name, callback=self.stop
     )
     actual_sharing_secret = self.wait()
     self.assertTrue(actual_sharing_secret is None)
 def test_get_sharing_record_by_sharing_secret(self):
     SharingController.create_sharing_record(self.__account_id, "test_collection", callback=self.stop)
     sharing_secret = self.wait()
     self.assertTrue(sharing_secret is not None)
     SharingController.get_sharing_record_by_secret(sharing_secret, callback=self.stop)
     sharing_record = self.wait()
     actual_sharing_secret = sharing_record.toDictionary()[SharingRecord.SECRET_KEY]
     self.assertEqual(sharing_secret, actual_sharing_secret)
     # cleanup
     SharingController.remove_sharing_record_by_secret(sharing_secret, callback=self.stop)
     self.wait()
    def test_get_sharing_record_from_subscriber_info_non_existing_subscriber(self):
        collection_name = "col_name"
        SharingController.create_sharing_record(self.__account_id, collection_name, callback=self.stop)
        sharing_secret = self.wait()
        self.assertTrue(sharing_secret is not None)

        SharingController.get_sharing_record_from_subscriber_info("dummy_account", collection_name, callback=self.stop)
        sharing_record = self.wait()
        self.assertTrue(sharing_record is None)

        # cleanup
        SharingController.remove_sharing_record_by_secret(sharing_secret, callback=self.stop)
        self.wait()
    def test_get_sharing_record_by_owner_info(self):
        collection_name = "col_name"
        SharingController.create_sharing_record(self.__account_id, collection_name, callback=self.stop)
        sharing_secret = self.wait()
        self.assertTrue(sharing_secret is not None)

        SharingController.get_sharing_record_by_owner_info(self.__account_id, collection_name, callback=self.stop)
        sharing_record = self.wait()
        actual_sharing_secret = sharing_record.get_sharing_secret()
        self.assertEqual(sharing_secret, actual_sharing_secret)
        # cleanup
        SharingController.remove_sharing_record_by_secret(sharing_secret, callback=self.stop)
        self.wait()
    def test_remove_subscriber_from_subscriber_collection(self):

        collection_name = "dummy_collection"
        sharing_secret = "secret"
        SharingController.add_subscriber(self.__account_id, collection_name, sharing_secret, callback=self.stop)
        self.wait()

        SharingController.get_sharing_secret_from_subscriber_info(
            self.__account_id, collection_name, callback=self.stop
        )
        actual_sharing_secret = self.wait()
        self.assertEqual(sharing_secret, actual_sharing_secret)

        SharingController.remove_subscriber(self.__account_id, collection_name, callback=self.stop)
        self.wait()

        SharingController.get_sharing_secret_from_subscriber_info(
            self.__account_id, collection_name, callback=self.stop
        )
        actual_sharing_secret = self.wait()
        self.assertTrue(actual_sharing_secret is None)
    def test_save_sharing_record(self):
        collection_name = "test_collection"
        SharingController.create_sharing_record(self.__account_id, collection_name, callback=self.stop)
        sharing_secret = self.wait()
        self.assertTrue(sharing_secret is not None)

        # verify subscriber collection
        SharingController.get_sharing_secret_from_subscriber_info(
            self.__account_id, collection_name, callback=self.stop
        )
        actual_sharing_secret = self.wait()
        self.assertEqual(sharing_secret, actual_sharing_secret)

        # cleanup
        SharingController.remove_sharing_record_by_secret(sharing_secret, callback=self.stop)
        self.wait()
    def test_rename_shared_collection_subscriber(self):

        # create collection
        first_collection_name = "shareable_collection" + str(random.randint)
        file = open("../test_resources/XooML.xml")
        StorageServer.add_collection(
            user_id=self.__account_id, collection_name=first_collection_name, callback=self.stop, file=file
        )
        response = self.wait()
        self.assertEqual(StorageResponse.OK, response)

        # create sharing record
        SharingController.create_sharing_record(self.__account_id, first_collection_name, callback=self.stop)
        sharing_secret = self.wait()
        self.assertTrue(sharing_secret is not None)

        # subscribe
        SharingController.subscribe_to_sharing_space(self.__subscriber_id, sharing_secret, callback=self.stop)
        subscribers_collection_name = self.wait()
        self.assertTrue(subscribers_collection_name is not None)

        # rename
        new_collection_name = "new_name" + str(random.randint)
        SharingController.rename_shared_collection(
            self.__subscriber_id, subscribers_collection_name, new_collection_name, callback=self.stop
        )
        response_code = self.wait()
        self.assertTrue(StorageResponse.OK, response_code)

        # verify
        SharingController.get_sharing_record_by_secret(sharing_secret, callback=self.stop)
        sharing_record = self.wait()
        renamed_collection_name = sharing_record.get_collection_name_for_subscriber(self.__subscriber_id)
        self.assertEqual(new_collection_name, renamed_collection_name)
        owner_collection_name = sharing_record.get_owner_collection_name()
        self.assertEqual(first_collection_name, owner_collection_name)

        # verify subscriber collection
        SharingController.get_sharing_secret_from_subscriber_info(
            self.__subscriber_id, new_collection_name, callback=self.stop
        )
        renamed_sharing_secret = self.wait()
        self.assertEqual(sharing_secret, renamed_sharing_secret)

        # cleanup
        SharingController.remove_sharing_record_by_secret(sharing_secret, callback=self.stop)
        self.wait()
        StorageServer.remove_collection(self.__account_id, first_collection_name, callback=self.stop)
        self.wait()
        StorageServer.remove_collection(self.__subscriber_id, subscribers_collection_name, callback=self.stop)
        self.wait()
    def test_load_balancing_increasing_decreasing_load(self):

        servers = ['a', 'b', 'c']
        Properties.sharing_space_servers = servers
        collection_name1 = str(uuid.uuid4())
        subscriber_list1 = [self.__subscriber_id, self.__second_subscriber_id]
        sharing_secret1, subscribers_collections1 =\
        self.__create_sharing_record(subscriber_list1, collection_name1)
        load_balancer = SharingLoadBalancer()
        load_balancer.get_sharing_space_info(sharing_secret1, callback=self.stop)
        server_info1 = self.wait()
        server_adrs1 = server_info1['server']
        print server_adrs1
        self.assertTrue(server_adrs1 in servers)

        collection_name2 = str(uuid.uuid4())
        subscriber_list2 = [self.__subscriber_id]
        sharing_secret2, subscribers_collections2 =\
        self.__create_sharing_record(subscriber_list2, collection_name2)
        load_balancer.get_sharing_space_info(sharing_secret2, callback=self.stop)
        server_info2 = self.wait()
        server_adrs2 = server_info2['server']
        print server_adrs2
        self.assertTrue(server_adrs2 in servers)
        self.assertNotEqual(server_adrs2, server_adrs1)


        collection_name3 = str(uuid.uuid4())
        subscriber_list3 = [self.__subscriber_id, self.__second_subscriber_id]
        sharing_secret3, subscribers_collections3 =\
        self.__create_sharing_record(subscriber_list3, collection_name3)
        load_balancer.get_sharing_space_info(sharing_secret3, callback=self.stop)
        server_info3 = self.wait()
        server_adrs3 = server_info3['server']
        print server_adrs3
        self.assertTrue(server_adrs3 in servers)
        self.assertNotEqual(server_adrs3, server_adrs1)
        self.assertNotEqual(server_adrs3, server_adrs2)


        load_balancer.remove_sharing_space_info(sharing_secret1, callback=self.stop)
        self.wait()

        collection_name4 = str(uuid.uuid4())
        subscriber_list4 = [self.__subscriber_id, self.__second_subscriber_id]
        sharing_secret4, subscribers_collections4 =\
        self.__create_sharing_record(subscriber_list4, collection_name4)
        load_balancer.get_sharing_space_info(sharing_secret4, callback=self.stop)
        server_info4 = self.wait()
        server_adrs4 = server_info4['server']
        print server_adrs4
        self.assertTrue(server_adrs4 in servers)
        self.assertEqual(server_adrs4, server_adrs1)


        #cleanup
        SharingController.remove_sharing_record_by_secret(sharing_secret1, callback =self.stop)
        self.wait()
        StorageServer.remove_collection(self.__account_id, collection_name1,
            callback=self.stop)
        for subscriber_id in subscribers_collections1:
            subscriber_collection = subscribers_collections1[subscriber_id]
            StorageServer.remove_collection(subscriber_id, subscriber_collection,
                callback=self.stop)
            self.wait()

        SharingController.remove_sharing_record_by_secret(sharing_secret2, callback =self.stop)
        self.wait()
        StorageServer.remove_collection(self.__account_id, collection_name2,
            callback=self.stop)
        for subscriber_id in subscribers_collections2:
            subscriber_collection = subscribers_collections2[subscriber_id]
            StorageServer.remove_collection(subscriber_id, subscriber_collection,
                callback=self.stop)
            self.wait()

        SharingController.remove_sharing_record_by_secret(sharing_secret3, callback =self.stop)
        self.wait()
        StorageServer.remove_collection(self.__account_id, collection_name3,
            callback=self.stop)
        for subscriber_id in subscribers_collections3:
            subscriber_collection = subscribers_collections3[subscriber_id]
            StorageServer.remove_collection(subscriber_id, subscriber_collection,
                callback=self.stop)
            self.wait()

        SharingController.remove_sharing_record_by_secret(sharing_secret4, callback =self.stop)
        self.wait()
        StorageServer.remove_collection(self.__account_id, collection_name4,
            callback=self.stop)
        for subscriber_id in subscribers_collections4:
            subscriber_collection = subscribers_collections4[subscriber_id]
            StorageServer.remove_collection(subscriber_id, subscriber_collection,
                callback=self.stop)
            self.wait()
 def test_get_invalid_sharing_record_by_owner_info(self):
     SharingController.get_sharing_record_by_owner_info(self.__account_id, "dummy", callback=self.stop)
     sharing_record = self.wait()
     self.assertTrue(sharing_record is None)
 def test_get_non_existing_sharing_record(self):
     SharingController.get_sharing_record_by_secret("invalidsecret", callback=self.stop)
     sharing_record = self.wait()
     self.assertTrue(sharing_record is None)
    def test_remove_all_subscribers_detailed(self):

        # create collection
        first_collection_name = "shareable_collection"
        file = open("../test_resources/XooML.xml")
        StorageServer.add_collection(
            user_id=self.__account_id, collection_name=first_collection_name, callback=self.stop, file=file
        )
        response = self.wait()
        self.assertEqual(StorageResponse.OK, response)

        # create sharing record
        SharingController.create_sharing_record(self.__account_id, first_collection_name, callback=self.stop)
        sharing_secret = self.wait()
        self.assertTrue(sharing_secret is not None)

        # subscribe
        SharingController.subscribe_to_sharing_space(self.__subscriber_id, sharing_secret, callback=self.stop)
        subscribers_collection_name = self.wait()
        self.assertTrue(subscribers_collection_name is not None)

        # remove all subscribers
        SharingController.remove_all_subscribers(sharing_secret, callback=self.stop)
        self.wait()

        # verify removed subscribers from subscriber table
        SharingController.get_sharing_record_from_subscriber_info(
            self.__subscriber_id, subscribers_collection_name, callback=self.stop
        )
        sharing_record = self.wait()
        self.assertTrue(sharing_record is None)
        SharingController.get_sharing_record_from_subscriber_info(
            self.__account_id, first_collection_name, callback=self.stop
        )
        sharing_record = self.wait()
        self.assertTrue(sharing_record is None)

        # cleanup
        SharingController.remove_sharing_record_by_secret(sharing_secret, callback=self.stop)
        self.wait()
        StorageServer.remove_collection(self.__account_id, first_collection_name, callback=self.stop)
        self.wait()
        StorageServer.remove_collection(self.__subscriber_id, subscribers_collection_name, callback=self.stop)
        self.wait()
    def test_rename_invalid_shared_collection(self):

        new_collection_name = "new_name" + str(random.randint)
        SharingController.rename_shared_collection(self.__account_id, "looloo", new_collection_name, callback=self.stop)
        response_code = self.wait()
        self.assertTrue(StorageResponse.NOT_FOUND, response_code)
    def test_get_sharing_record_from_subscriber_info_non_existing_shared_space(self):

        SharingController.get_sharing_record_from_subscriber_info(self.__account_id, "dummy", callback=self.stop)
        sharing_record = self.wait()
        self.assertTrue(sharing_record is None)