コード例 #1
0
    def create_file(auth, file_name, extra_data):
        files_management_client = FilesManagementClient()
        response = files_management_client.create_file_v2(auth=auth, new_drawing_name=file_name)

        status_code = ClientUtils.get_response_status_code(response)
        if not httplib.OK == status_code:
            return None, 'Expected status: ' + str(httplib.OK) + ' but got: ' + str(status_code)
        extra_data.add_test_data('create_file response', ClientUtils.get_response_body(response))

        created_file_id = ClientUtils.get_value_from_body(response, FilesManagementClient.KEY_VERSION_ID)
        if not created_file_id > 0:
            return None, 'Expected a valid file id but got: ' + str(created_file_id)
        extra_data.add_test_data('created file id', created_file_id)

        return created_file_id, ''
コード例 #2
0
class DrawingPreferencesTests(TestCase):
    auth = None

    user_name = 'rest_tests_drawing_preferences_' + str(int(
        time())) + '@autodesk.com'
    password = '******'
    first_name = 'Rest'
    last_name = 'Test'

    extra_data = None
    files_management_client = FilesManagementClient()

    def setUp(self):
        self.extra_data = ExtraDataManager()
        self.extra_data.add_test_data('user name', self.user_name)
        main_register_and_login_mixin = MainRegisterAndLoginMixin()
        if DrawingPreferencesTests.auth is None:
            response = main_register_and_login_mixin.login_or_register(
                user_name=self.user_name,
                password=self.password,
                first_name=self.first_name,
                last_name=self.last_name)
            DrawingPreferencesTests.auth = main_register_and_login_mixin.get_auth_from_login_data(
                response)
        self.assertIsInstance(
            DrawingPreferencesTests.auth, str, 'Invalid auth: ' +
            str(DrawingPreferencesTests.auth) + self.extra_data.get_all())

    def test_get_drawing_preferences(self):
        file_name = 'test_file_get_drawing_prefs_' + str(int(time())) + '.dwg'
        self.extra_data.add_test_data('file name', file_name)

        created_file_id, msg = TestUtils.create_file(
            auth=self.auth, file_name=file_name, extra_data=self.extra_data)
        self.assertIsNotNone(created_file_id, msg + self.extra_data.get_all())

        get_drawing_prefs_response = self.files_management_client.get_drawing_preferences(
            auth=self.auth, file_id=created_file_id)
        status_code = ClientUtils.get_response_status_code(
            get_drawing_prefs_response)
        self.assertEqual(
            httplib.OK, status_code,
            'Got status code: ' + str(status_code) + self.extra_data.get_all())
        self.extra_data.add_test_data('get_drawing_preferences response',
                                      get_drawing_prefs_response)

        user_specific_drawing_prefs_in_response_body = ClientUtils.is_key_in_body(
            response=get_drawing_prefs_response,
            nested_keys='userSpecificDrawingPreferences')
        self.assertTrue(
            user_specific_drawing_prefs_in_response_body,
            'Exepected key userSpecificDrawingPreferences to exist in repsonse body'
            + self.extra_data.get_all())

        shared_drawing_prefs_in_response_body = ClientUtils.is_key_in_body(
            response=get_drawing_prefs_response,
            nested_keys='sharedDrawingPreferences')
        self.assertTrue(
            shared_drawing_prefs_in_response_body,
            'Exepected key sharedDrawingPreferences to exist in repsonse body'
            + self.extra_data.get_all())

    def test_post_drawing_preferences(self):
        file_name = 'test_file_post_drawing_prefs' + str(int(time())) + '.dwg'
        expected_orth_on = True
        expected_line_weight_on = False
        self.extra_data.add_test_data('file name', file_name)

        created_file_id, msg = TestUtils.create_file(
            auth=self.auth, file_name=file_name, extra_data=self.extra_data)
        self.assertIsNotNone(created_file_id, msg + self.extra_data.get_all())

        user_specific_drawing_prefs = {}
        user_specific_drawing_prefs.__setitem__('orthoOn', expected_orth_on)
        user_specific_drawing_prefs.__setitem__('lineWeightOn',
                                                expected_line_weight_on)
        post_drawing_prefs_response = self.files_management_client.post_drawing_preferences(
            auth=self.auth,
            file_id=created_file_id,
            user_specific_drawing_preferences=user_specific_drawing_prefs)
        self.assertIsNotNone(post_drawing_prefs_response,
                             'Response is None' + self.extra_data.get_all())
        status_code = ClientUtils.get_response_status_code(
            post_drawing_prefs_response)
        self.assertEqual(
            httplib.NO_CONTENT, status_code,
            'Got status code: ' + str(status_code) + self.extra_data.get_all())
        self.assertTrue(
            ClientUtils.is_response_body_empty(post_drawing_prefs_response),
            'Expected empty response body but got: ' +
            str(ClientUtils.get_response_body(post_drawing_prefs_response)) +
            self.extra_data.get_all())

        get_drawing_prefs_response = self.files_management_client.get_drawing_preferences(
            auth=self.auth, file_id=created_file_id)
        status_code = ClientUtils.get_response_status_code(
            get_drawing_prefs_response)
        self.assertEqual(
            httplib.OK, status_code,
            'Got status code: ' + str(status_code) + self.extra_data.get_all())
        self.extra_data.add_test_data(
            'get_drawing_preferences response',
            ClientUtils.get_response_body(get_drawing_prefs_response))

        orth_on = ClientUtils.get_value_from_body(
            response=get_drawing_prefs_response,
            json_path='userSpecificDrawingPreferences.orthoOn')
        self.assertEqual(
            expected_orth_on, orth_on,
            'Expected orth_on: ' + str(expected_orth_on) + 'but got: ' +
            str(orth_on) + self.extra_data.get_all())

        line_weight_on = ClientUtils.get_value_from_body(
            response=get_drawing_prefs_response,
            json_path='userSpecificDrawingPreferences.lineWeightOn')
        self.assertEqual(
            expected_line_weight_on, line_weight_on,
            'Expected line_weight_on: ' + str(expected_line_weight_on) +
            'but got: ' + str(line_weight_on) + self.extra_data.get_all())
コード例 #3
0
class UserShareSuggestionsTest(TestCase):
    auth = None

    user_name = 'rest_tests_user_share_suggestions_' + str(int(
        time())) + '@autodesk.com'
    first_name = 'Rest'
    last_name = 'Test'
    password = '******'

    extra_data = None
    user_client = UserClient()
    files_management_client = FilesManagementClient()
    main_register_and_login_mixin = MainRegisterAndLoginMixin()

    def setUp(self):
        self.extra_data = ExtraDataManager()
        self.extra_data.add_test_data('user name', self.user_name)
        if UserShareSuggestionsTest.auth is None:
            response = self.main_register_and_login_mixin.login_or_register(
                user_name=self.user_name,
                password=self.password,
                first_name=self.first_name,
                last_name=self.last_name)
            UserShareSuggestionsTest.auth = self.main_register_and_login_mixin.get_auth_from_login_data(
                response)
        self.assertIsInstance(
            UserShareSuggestionsTest.auth, str, 'Invalid auth: ' +
            str(UserShareSuggestionsTest.auth) + self.extra_data.get_all())

    def test_get_user_share_suggestions(self):
        file_name = 'test_file_get_user_share_suggestions' + str(int(
            time())) + '.dwg'
        user_name_to_share_with = 'rest_tests_share_with_user' + str(
            int(time())) + '@autodesk.com'
        first_name_share_with = 'Rest'
        last_name_share_with = 'Test'
        password_share_with = 'Moomoo123'

        self.extra_data.add_test_data('file name', file_name)
        self.extra_data.add_test_data('user name to share with',
                                      user_name_to_share_with)

        created_file_id, msg = TestUtils.create_file(
            auth=self.auth, file_name=file_name, extra_data=self.extra_data)
        self.assertIsNotNone(created_file_id, msg + self.extra_data.get_all())

        login_data = self.main_register_and_login_mixin.login_or_register(
            user_name=user_name_to_share_with,
            password=password_share_with,
            first_name=first_name_share_with,
            last_name=last_name_share_with)
        self.assertIsNotNone(
            login_data, 'Failed to register user_name_to_share_with' +
            self.extra_data.get_all())

        share_response = self.files_management_client.share_file_v2(
            auth=self.auth,
            file_id=created_file_id,
            emails=[user_name_to_share_with])
        status_code = ClientUtils.get_response_status_code(share_response)
        self.assertEqual(
            httplib.OK, status_code,
            'Got status code: ' + str(status_code) + self.extra_data.get_all())
        self.extra_data.add_test_data(
            'share_file response',
            ClientUtils.get_response_body(share_response))

        user_share_suggestions_response = self.user_client.get_user_share_suggestions(
            auth=self.auth)
        status_code = ClientUtils.get_response_status_code(
            user_share_suggestions_response)
        self.assertEqual(
            httplib.OK, status_code,
            'Got status code: ' + str(status_code) + self.extra_data.get_all())
        self.extra_data.add_test_data(
            'get_user_share_suggestions response',
            ClientUtils.get_response_body(user_share_suggestions_response))

        response_contact_addresses = TestUtils.get_addresses_from_share_suggestions_response(
            user_share_suggestions_response)
        self.assertTrue(
            len(response_contact_addresses) == 1,
            'Expected 1 share suggestion only but got: ' +
            str(response_contact_addresses) + self.extra_data.get_all())
コード例 #4
0
class TimelineTests(TestCase):
    auth = None

    user_name = 'rest_tests_timeline_' + str(int(time())) + '@autodesk.com'
    password = '******'
    first_name = 'Rest'
    last_name = 'Test'

    extra_data = None
    files_management_client = FilesManagementClient()

    def setUp(self):
        self.extra_data = ExtraDataManager()
        self.extra_data.add_test_data('user name', self.user_name)
        main_register_and_login_mixin = MainRegisterAndLoginMixin()
        if TimelineTests.auth is None:
            response = main_register_and_login_mixin.login_or_register(
                user_name=self.user_name,
                password=self.password,
                first_name=self.first_name,
                last_name=self.last_name)
            TimelineTests.auth = main_register_and_login_mixin.get_auth_from_login_data(
                response)
        self.assertIsInstance(
            TimelineTests.auth, str, 'Invalid auth: ' +
            str(TimelineTests.auth) + self.extra_data.get_all())

    def test_timeline_manual(self):
        file_name = 'test_file_timeline_manual_' + str(int(time())) + '.dwg'
        title = 'test_title_' + str(int(time()))

        self.extra_data.add_test_data('file name', file_name)
        self.extra_data.add_test_data('title', title)

        created_file_id, msg = TestUtils.create_file(
            auth=self.auth, file_name=file_name, extra_data=self.extra_data)
        self.assertIsNotNone(created_file_id, msg + self.extra_data.get_all())

        manual_timeline_response = self.files_management_client.put_timeline_manual(
            auth=self.auth, file_id=created_file_id, title=title)
        status_code = ClientUtils.get_response_status_code(
            manual_timeline_response)
        self.assertEqual(
            httplib.OK, status_code,
            'Got status code: ' + str(status_code) + self.extra_data.get_all())
        self.extra_data.add_test_data(
            'put_timeline_manual response',
            ClientUtils.get_response_body(manual_timeline_response))

        response_title = ClientUtils.get_value_from_body(
            manual_timeline_response, FilesManagementClient.KEY_TITLE)
        self.assertEqual(
            title, response_title, 'Expected title: ' + str(title) +
            ' but got: ' + str(response_title) + self.extra_data.get_all())

        get_timeline_response = self.files_management_client.get_timeline(
            auth=self.auth, file_id=created_file_id)
        status_code = ClientUtils.get_response_status_code(
            get_timeline_response)
        self.assertEqual(
            httplib.OK, status_code,
            'Got status code: ' + str(status_code) + self.extra_data.get_all())
        self.extra_data.add_test_data(
            'get_timeline response',
            ClientUtils.get_response_body(get_timeline_response))

        response_entries = ClientUtils.get_value_from_body(
            get_timeline_response, FilesManagementClient.KEY_ENTRIES)
        self.assertIsNotNone(
            response_entries,
            'Expected non empty entries' + self.extra_data.get_all())
        self.assertTrue(
            len(response_entries) == 2,
            'Expected exactly 2 entries in response body but got: ' +
            str(response_entries) + self.extra_data.get_all())
        self.extra_data.add_test_data('response entries', response_entries)

        entry = response_entries[0]
        if entry['title'] != title:
            entry = response_entries[1]

        entry_primary_id = entry['primaryVersionId']
        self.assertEqual(
            created_file_id, entry_primary_id,
            'Expected file id: ' + str(created_file_id) + ' but got: ' +
            str(entry_primary_id) + self.extra_data.get_all())
        entry_title = entry['title']
        self.assertEqual(
            title, entry_title, 'Expected title: ' + str(title) +
            ' but got: ' + str(entry_title) + self.extra_data.get_all())

        users_drawing_prefs_in_response_body = ClientUtils.is_key_in_body(
            get_timeline_response, 'usersDrawingPreferences')
        self.assertTrue(
            users_drawing_prefs_in_response_body,
            'Expected usersDrawingPreferences in response body' +
            self.extra_data.get_all())
コード例 #5
0
class ShareFilesTests(TestCase):
    auth = None

    user_name = 'rest_tests_share_files_' + str(int(time())) + '@autodesk.com'
    password = '******'
    first_name = 'Rest'
    last_name = 'Test'

    extra_data = None
    main_register_and_login_mixin = MainRegisterAndLoginMixin()
    files_management_client = FilesManagementClient()
    partition_client = PartitionClient()

    def setUp(self):
        self.extra_data = ExtraDataManager()
        self.extra_data.add_test_data('user name', self.user_name)
        if ShareFilesTests.auth is None:
            response = self.main_register_and_login_mixin.login_or_register(
                user_name=self.user_name,
                password=self.password,
                first_name=self.first_name,
                last_name=self.last_name)
            ShareFilesTests.auth = self.main_register_and_login_mixin.get_auth_from_login_data(
                response)
        self.assertIsInstance(
            ShareFilesTests.auth, str, 'Invalid auth: ' +
            str(ShareFilesTests.auth) + self.extra_data.get_all())

    def test_share_file(self):
        file_name = 'test_file_share_file_' + str(int(time())) + '.dwg'
        expected_code_and_description = (0, 'SUCCESS')
        user_name_to_share_with = 'rest_tests_share_with_user_' + str(
            int(time())) + '@autodesk.com'

        self.extra_data.add_test_data('file name', file_name)
        self.extra_data.add_test_data('user name to share with',
                                      user_name_to_share_with)

        login_data = self.main_register_and_login_mixin.login_or_register(
            user_name=user_name_to_share_with,
            password=self.password,
            first_name=self.first_name,
            last_name=self.last_name)
        auth_user_to_share_with = self.main_register_and_login_mixin.get_auth_from_login_data(
            login_data)

        self.assertIsInstance(
            auth_user_to_share_with, str, 'Invalid auth: ' +
            str(auth_user_to_share_with) + self.extra_data.get_all())

        created_file_id, msg = TestUtils.create_file(
            auth=self.auth, file_name=file_name, extra_data=self.extra_data)
        self.assertIsNotNone(created_file_id, msg + self.extra_data.get_all())

        share_response = self.files_management_client.share_file(
            auth=self.auth,
            file_id=created_file_id,
            emails=[user_name_to_share_with])
        status_code = ClientUtils.get_response_status_code(share_response)
        self.assertEqual(
            httplib.OK, status_code,
            'Got status code: ' + str(status_code) + self.extra_data.get_all())
        self.extra_data.add_test_data(
            'share_file response',
            ClientUtils.get_response_body(share_response))

        code_desc = ClientUtils.get_code_and_description_from_response(
            share_response)
        self.assertEqual(
            expected_code_and_description, code_desc,
            'Expected ' + str(expected_code_and_description) + ' but got: ' +
            str(code_desc) + self.extra_data.get_all())

        file_system_entries, msg = TestUtils.get_internal_partition(
            auth=auth_user_to_share_with, extra_data=self.extra_data)
        self.assertIsNotNone(file_system_entries,
                             msg + self.extra_data.get_all())

        shared_file = TestUtils.get_entry_from_internal_file_system_entries(
            created_file_id, file_system_entries)

        self.assertIsNotNone(
            shared_file, 'Shared file should exist in partition' +
            self.extra_data.get_all())

    def test_share_file_v2(self):
        file_name = 'test_file_share_file_v2_' + str(int(time())) + '.dwg'
        expected_code_and_description = (0, 'SUCCESS')
        user_name_to_share_with = 'rest_tests_share_with_user_' + str(
            int(time())) + '@autodesk.com'

        self.extra_data.add_test_data('file name', file_name)
        self.extra_data.add_test_data('user name to share with',
                                      user_name_to_share_with)

        login_data = self.main_register_and_login_mixin.login_or_register(
            user_name=user_name_to_share_with,
            password=self.password,
            first_name=self.first_name,
            last_name=self.last_name)
        auth_user_to_share_with = self.main_register_and_login_mixin.get_auth_from_login_data(
            login_data)

        self.assertIsInstance(
            auth_user_to_share_with, str, 'Invalid auth: ' +
            str(auth_user_to_share_with) + self.extra_data.get_all())

        created_file_id, msg = TestUtils.create_file(
            auth=self.auth, file_name=file_name, extra_data=self.extra_data)
        self.assertIsNotNone(created_file_id, msg + self.extra_data.get_all())

        share_response = self.files_management_client.share_file_v2(
            auth=self.auth,
            file_id=created_file_id,
            emails=[user_name_to_share_with])
        status_code = ClientUtils.get_response_status_code(share_response)
        self.assertEqual(
            httplib.OK, status_code,
            'Got status code: ' + str(status_code) + self.extra_data.get_all())
        self.extra_data.add_test_data(
            'share_file response',
            ClientUtils.get_response_body(share_response))

        code_desc = ClientUtils.get_code_and_description_from_response(
            share_response)
        self.assertEqual(
            expected_code_and_description, code_desc,
            'Expected ' + str(expected_code_and_description) + ' but got: ' +
            str(code_desc) + self.extra_data.get_all())

        file_system_entries, msg = TestUtils.get_internal_partition(
            auth=auth_user_to_share_with, extra_data=self.extra_data)
        self.assertIsNotNone(file_system_entries,
                             msg + self.extra_data.get_all())

        shared_file = TestUtils.get_entry_from_internal_file_system_entries(
            created_file_id, file_system_entries)

        self.assertIsNotNone(
            shared_file, 'Shared file should exist in partition' +
            self.extra_data.get_all())

    def test_share_file_v2_without_sharing_permissions(self):
        file_name = 'test_file_share_file_v2_without_permissions_' + str(
            int(time())) + '.dwg'
        expected_code_and_description = (3, 'INSUFFICIENT PERMISSIONS')
        user_name_to_share_with = 'rest_tests_share_with_user_' + str(
            int(time())) + '@autodesk.com'
        user_name_can_not_share_with = 'rest_tests_share_with_user_should_fail_' + str(
            int(time())) + '@autodesk.com'

        self.extra_data.add_test_data('file name', file_name)
        self.extra_data.add_test_data('user name to share with',
                                      user_name_to_share_with)
        self.extra_data.add_test_data('user name can not share with',
                                      user_name_can_not_share_with)

        login_data = self.main_register_and_login_mixin.login_or_register(
            user_name=user_name_to_share_with,
            password=self.password,
            first_name=self.first_name,
            last_name=self.last_name)
        auth_user_to_share_with = self.main_register_and_login_mixin.get_auth_from_login_data(
            login_data)

        self.assertIsInstance(
            auth_user_to_share_with, str, 'Invalid auth: ' +
            str(auth_user_to_share_with) + self.extra_data.get_all())

        login_data = self.main_register_and_login_mixin.login_or_register(
            user_name=user_name_can_not_share_with,
            password=self.password,
            first_name=self.first_name,
            last_name=self.last_name)
        auth_user_can_not_share_with = self.main_register_and_login_mixin.get_auth_from_login_data(
            login_data)

        self.assertIsInstance(
            auth_user_can_not_share_with, str, 'Invalid auth: ' +
            str(auth_user_can_not_share_with) + self.extra_data.get_all())

        created_file_id, msg = TestUtils.create_file(
            auth=self.auth, file_name=file_name, extra_data=self.extra_data)
        self.assertIsNotNone(created_file_id, msg + self.extra_data.get_all())

        share_response = self.files_management_client.share_file_v2(
            auth=self.auth,
            file_id=created_file_id,
            emails=[user_name_to_share_with],
            can_share=False)
        status_code = ClientUtils.get_response_status_code(share_response)
        self.assertEqual(
            httplib.OK, status_code,
            'Got status code: ' + str(status_code) + self.extra_data.get_all())
        self.extra_data.add_test_data(
            'share_file response',
            ClientUtils.get_response_body(share_response))

        file_system_entries, msg = TestUtils.get_internal_partition(
            auth=auth_user_to_share_with, extra_data=self.extra_data)
        self.assertIsNotNone(file_system_entries,
                             msg + self.extra_data.get_all())

        shared_file = TestUtils.get_entry_from_internal_file_system_entries(
            created_file_id, file_system_entries)

        self.assertIsNotNone(
            shared_file, 'Shared file should exist in partition' +
            self.extra_data.get_all())

        share_response = self.files_management_client.share_file_v2(
            auth=auth_user_to_share_with,
            file_id=created_file_id,
            emails=[user_name_can_not_share_with])
        status_code = ClientUtils.get_response_status_code(share_response)
        self.assertEqual(
            httplib.OK, status_code,
            'Got status code: ' + str(status_code) + self.extra_data.get_all())
        self.extra_data.add_test_data(
            'share_file response',
            ClientUtils.get_response_body(share_response))

        code_desc = ClientUtils.get_code_and_description_from_response(
            share_response)
        self.assertEqual(
            expected_code_and_description, code_desc,
            'Expected ' + str(expected_code_and_description) + ' but got: ' +
            str(code_desc) + self.extra_data.get_all())

        file_system_entries, msg = TestUtils.get_internal_partition(
            auth=auth_user_can_not_share_with, extra_data=self.extra_data)
        self.assertIsNotNone(file_system_entries,
                             msg + self.extra_data.get_all())

        shared_file = TestUtils.get_entry_from_internal_file_system_entries(
            created_file_id, file_system_entries)

        self.assertIsNone(
            shared_file,
            'File not shared due to missing permissions should not exist in partition'
            + self.extra_data.get_all())

    def test_get_file_shares(self):
        file_name = 'test_file_get_file_shares_' + str(int(time())) + '.dwg'
        user_name_to_share_with = 'rest_tests_share_with_user_' + str(
            int(time())) + '@autodesk.com'

        self.extra_data.add_test_data('file name', file_name)
        self.extra_data.add_test_data('user name to share with',
                                      user_name_to_share_with)

        login_data = self.main_register_and_login_mixin.login_or_register(
            user_name=user_name_to_share_with,
            password=self.password,
            first_name=self.first_name,
            last_name=self.last_name)

        self.assertIsNotNone(
            login_data, 'Failed to register user_name_to_share_with' +
            self.extra_data.get_all())

        created_file_id, msg = TestUtils.create_file(
            auth=self.auth, file_name=file_name, extra_data=self.extra_data)
        self.assertIsNotNone(created_file_id, msg + self.extra_data.get_all())

        share_response = self.files_management_client.share_file_v2(
            auth=self.auth,
            file_id=created_file_id,
            emails=[user_name_to_share_with])
        status_code = ClientUtils.get_response_status_code(share_response)
        self.assertEqual(
            httplib.OK, status_code,
            'Got status code: ' + str(status_code) + self.extra_data.get_all())
        self.extra_data.add_test_data(
            'share_file response',
            ClientUtils.get_response_body(share_response))

        get_shares_response = self.files_management_client.get_file_shares(
            auth=self.auth, file_id=created_file_id)
        status_code = ClientUtils.get_response_status_code(get_shares_response)
        self.assertEqual(
            httplib.OK, status_code,
            'Got status code: ' + str(status_code) + self.extra_data.get_all())
        self.extra_data.add_test_data(
            'get_file_shares response',
            ClientUtils.get_response_body(get_shares_response))

        user_names = TestUtils.get_user_names_from_get_file_shares_response(
            get_shares_response)
        expected_user_names = [self.user_name, user_name_to_share_with]
        self.assertItemsEqual(
            expected_user_names, user_names,
            'Expected users ' + str(expected_user_names) +
            ' to have permissions on file but got: ' + str(user_names) +
            self.extra_data.get_all())

    def test_remove_file_share(self):
        file_name = 'test_file_remove_file_share' + str(int(time())) + '.dwg'
        expected_code_and_description = (0, 'SUCCESS')
        user_name_to_share_with = 'rest_tests_share_with_user_' + str(
            int(time())) + '@autodesk.com'

        login_data = self.main_register_and_login_mixin.login_or_register(
            user_name=user_name_to_share_with,
            password=self.password,
            first_name=self.first_name,
            last_name=self.last_name)
        user_id_to_share_with = self.main_register_and_login_mixin.get_user_id_from_login_data(
            login_data)
        auth_user_to_share_with = self.main_register_and_login_mixin.get_auth_from_login_data(
            login_data)

        self.assertIsInstance(
            auth_user_to_share_with, str, 'Invalid auth: ' +
            str(auth_user_to_share_with) + self.extra_data.get_all())

        created_file_id, msg = TestUtils.create_file(
            auth=self.auth, file_name=file_name, extra_data=self.extra_data)
        self.assertIsNotNone(created_file_id, msg + self.extra_data.get_all())

        share_response = self.files_management_client.share_file_v2(
            auth=self.auth,
            file_id=created_file_id,
            emails=[user_name_to_share_with])
        status_code = ClientUtils.get_response_status_code(share_response)
        self.assertEqual(
            httplib.OK, status_code,
            'Got status code: ' + str(status_code) + self.extra_data.get_all())
        self.extra_data.add_test_data(
            'share_file response',
            ClientUtils.get_response_body(share_response))

        delete_share_response = self.files_management_client.delete_file_share(
            auth=self.auth,
            file_id=created_file_id,
            user_id=user_id_to_share_with)
        status_code = ClientUtils.get_response_status_code(
            delete_share_response)
        self.assertEqual(
            httplib.OK, status_code,
            'Got status code: ' + str(status_code) + self.extra_data.get_all())
        self.extra_data.add_test_data(
            'delete_file_share response',
            ClientUtils.get_response_body(delete_share_response))

        code_desc = ClientUtils.get_code_and_description_from_response(
            delete_share_response)
        self.assertEqual(
            expected_code_and_description, code_desc,
            'Expected ' + str(expected_code_and_description) + ' but got: ' +
            str(code_desc) + self.extra_data.get_all())

        file_system_entries, msg = TestUtils.get_internal_partition(
            auth=auth_user_to_share_with, extra_data=self.extra_data)
        self.assertIsNotNone(file_system_entries,
                             msg + self.extra_data.get_all())

        shared_file = TestUtils.get_entry_from_internal_file_system_entries(
            created_file_id, file_system_entries)

        self.assertIsNone(
            shared_file,
            'File no longer shared should not exist in partition' +
            self.extra_data.get_all())
コード例 #6
0
class BoxExternalFileSystemTests(TestCase):
    auth = None
    host_id = None

    user_name = 'rest_tests_box_filesystem_' + str(int(
        time())) + '@autodesk.com'
    password = '******'
    first_name = 'Rest'
    last_name = 'Test'

    service_url = 'https://dav.box.com/dav'
    folder_name = 'box_folder'
    box_user_name = settings.BOX_USER_NAME
    box_password = settings.BOX_PASSWORD

    extra_data = None
    partition_client = PartitionClient()
    external_storage_client = ExternalStorageClient()
    files_management_client = FilesManagementClient()
    folders_management_client = FoldersManagementClient()

    def setUp(self):
        self.extra_data = ExtraDataManager()
        self.extra_data.add_test_data('user name', self.user_name)
        main_register_and_login_mixin = MainRegisterAndLoginMixin()
        if BoxExternalFileSystemTests.auth is None:
            response = main_register_and_login_mixin.login_or_register(
                user_name=self.user_name,
                password=self.password,
                first_name=self.first_name,
                last_name=self.last_name)
            BoxExternalFileSystemTests.auth = main_register_and_login_mixin.get_auth_from_login_data(
                response)
        self.assertIsInstance(
            BoxExternalFileSystemTests.auth, str, 'Invalid auth: ' +
            str(BoxExternalFileSystemTests.auth) + self.extra_data.get_all())

        if BoxExternalFileSystemTests.host_id is None:
            connect_to_box_response = self.external_storage_client.webdav_connect_to_external_storage(
                auth=self.auth,
                folder_name=self.folder_name,
                service_url=self.service_url,
                user_name=self.box_user_name,
                password=self.box_password)
            status_code = ClientUtils.get_response_status_code(
                connect_to_box_response)
            self.assertEqual(
                httplib.OK, status_code, 'Got status code: ' +
                str(status_code) + self.extra_data.get_all())
            self.extra_data.add_test_data(
                'webdav_connect_to_external_storage_response',
                ClientUtils.get_response_body(connect_to_box_response))

            host_id = ClientUtils.get_value_from_body(
                connect_to_box_response, ExternalStorageClient.KEY_HOST_ID)
            self.assertEquals(
                61043, host_id, 'expected host_id: 61043 but got: ' +
                str(host_id) + self.extra_data.get_all())
            BoxExternalFileSystemTests.host_id = host_id

    def test_connect_to_box(self):
        active_hosts_response = self.external_storage_client.webdav_active_hosts(
            auth=self.auth)
        status_code = ClientUtils.get_response_status_code(
            active_hosts_response)
        self.assertEqual(
            httplib.OK, status_code,
            'Got status code: ' + str(status_code) + self.extra_data.get_all())
        self.extra_data.add_test_data(
            'webdav_active_hosts response',
            ClientUtils.get_response_body(active_hosts_response))

        active_hosts = ClientUtils.get_response_body(active_hosts_response)
        self.assertIsNotNone(
            active_hosts, 'active_hosts is None' + self.extra_data.get_all())

        found_host_in_active_hosts = False
        for host in active_hosts:
            if host['hostId'] == self.host_id:
                found_host_in_active_hosts = True
                break
        self.assertTrue(
            found_host_in_active_hosts,
            'Expected to find hostId 61043 in active hosts' +
            self.extra_data.get_all())

    def test_get_partition_external_v2(self):
        expected_entries_names = [
            'xref with block - Standard.zip', 'LiveView_Clean.dwg',
            'Permanent_Folder'
        ]

        response = self.partition_client.get_external_partition_v2(
            auth=self.auth, host_id=self.host_id)
        status_code = ClientUtils.get_response_status_code(response)
        self.assertEqual(
            httplib.OK, status_code,
            'Got status code: ' + str(status_code) + self.extra_data.get_all())
        self.extra_data.add_test_data('external_partition response',
                                      ClientUtils.get_response_body(response))

        file_system_entries = ClientUtils.get_value_from_body(
            response, PartitionClient.KEY_FILE_SYSTEM_ENTRIES)
        self.assertIsNotNone(
            file_system_entries,
            'Expected non empty partition' + self.extra_data.get_all())

        file_system_entries_names = TestUtils.get_entries_names_from_file_system_entries(
            file_system_entries)
        self.assertItemsEqual(
            expected_entries_names, file_system_entries_names,
            'Expected entries names: ' + str(expected_entries_names) +
            ' but got: ' + str(file_system_entries_names) +
            self.extra_data.get_all())

    def test_get_partition_external(self):
        expected_entries_names = [
            'xref with block - Standard.zip', 'LiveView_Clean.dwg',
            'Permanent_Folder'
        ]

        response = self.partition_client.get_external_partition(
            auth=self.auth, host_id=self.host_id)
        status_code = ClientUtils.get_response_status_code(response)
        self.assertEqual(
            httplib.OK, status_code,
            'Got status code: ' + str(status_code) + self.extra_data.get_all())
        self.extra_data.add_test_data('external_partition response',
                                      ClientUtils.get_response_body(response))

        file_system_entries = ClientUtils.get_value_from_body(
            response, PartitionClient.KEY_FILE_SYSTEM_ENTRIES)
        self.assertIsNotNone(
            file_system_entries,
            'Expected non empty partition' + self.extra_data.get_all())

        file_system_entries_names = TestUtils.get_entries_names_from_file_system_entries(
            file_system_entries)
        self.assertItemsEqual(
            expected_entries_names, file_system_entries_names,
            'Expected entries names: ' + str(expected_entries_names) +
            ' but got: ' + str(file_system_entries_names) +
            self.extra_data.get_all())

    def test_create_rename_and_delete_external_folder_v2(self):
        folder_name = 'test_folder_external_folder_flow_' + str(int(time()))
        folder_new_name = 'test_folder_external_folder_flow_renamed_' + str(
            int(time()))
        permanent_folder = 'Permanent_Folder/'
        expected_code_and_description = (0, 'SUCCESS')

        self.extra_data.add_test_data('folder name', folder_name)
        self.extra_data.add_test_data('folder new name', folder_new_name)

        create_folder_response = self.folders_management_client.create_external_folder_v2(
            auth=self.auth,
            host_id=self.host_id,
            new_folder_name=folder_name,
            folder_path=permanent_folder)

        status_code = ClientUtils.get_response_status_code(
            create_folder_response)
        self.assertEqual(
            httplib.OK, status_code,
            'Got status code: ' + str(status_code) + self.extra_data.get_all())
        self.extra_data.add_test_data(
            'create_external_folder response',
            ClientUtils.get_response_body(create_folder_response))

        code_desc = ClientUtils.get_code_and_description_from_response(
            create_folder_response)
        self.assertEqual(
            expected_code_and_description, code_desc,
            'Expected ' + str(expected_code_and_description) + ' but got: ' +
            str(code_desc) + self.extra_data.get_all())

        file_system_entries, msg = TestUtils.get_external_partition(
            auth=self.auth,
            host_id=self.host_id,
            path=permanent_folder,
            extra_data=self.extra_data)
        self.assertIsNotNone(file_system_entries,
                             msg + self.extra_data.get_all())

        file_system_entries_names = [
            str(entry[self.partition_client.KEY_ENTRY_NAME])
            for entry in file_system_entries
            if entry['type'] == 'EXTERNAL_FOLDER'
        ]

        if folder_name not in file_system_entries_names:
            self.fail('Folder should have been created in external host' +
                      self.extra_data.get_all())

        new_folder_relative_path = permanent_folder + folder_name
        self.extra_data.add_test_data('new folder relative path',
                                      new_folder_relative_path)

        rename_folder_response = self.folders_management_client.rename_external_folder_v2(
            auth=self.auth,
            host_id=self.host_id,
            path=new_folder_relative_path,
            name=folder_new_name)
        status_code = ClientUtils.get_response_status_code(
            rename_folder_response)
        self.assertEqual(
            httplib.OK, status_code,
            'Got status code: ' + str(status_code) + self.extra_data.get_all())
        self.extra_data.add_test_data(
            'rename_external_folder response',
            ClientUtils.get_response_body(rename_folder_response))

        code_desc = ClientUtils.get_code_and_description_from_response(
            rename_folder_response)
        self.assertEqual(
            expected_code_and_description, code_desc,
            'Expected ' + str(expected_code_and_description) + ' but got: ' +
            str(code_desc) + self.extra_data.get_all())

        file_system_entries, msg = TestUtils.get_external_partition(
            auth=self.auth,
            host_id=self.host_id,
            path=permanent_folder,
            extra_data=self.extra_data)
        self.assertIsNotNone(file_system_entries,
                             msg + self.extra_data.get_all())

        file_system_entries_names = [
            str(entry[self.partition_client.KEY_ENTRY_NAME])
            for entry in file_system_entries
            if entry['type'] == 'EXTERNAL_FOLDER'
        ]

        if folder_new_name not in file_system_entries_names:
            self.fail('Folder should have been renamed in external host' +
                      self.extra_data.get_all())

        renamed_folder_relative_path = permanent_folder + folder_new_name
        self.extra_data.add_test_data('renamed folder relative path',
                                      renamed_folder_relative_path)
        delete_folder_response = self.folders_management_client.delete_external_folder_v2(
            auth=self.auth,
            host_id=self.host_id,
            path=renamed_folder_relative_path)
        status_code = ClientUtils.get_response_status_code(
            delete_folder_response)
        self.assertEqual(
            httplib.OK, status_code,
            'Got status code: ' + str(status_code) + self.extra_data.get_all())
        self.extra_data.add_test_data(
            'delete_external_folder response',
            ClientUtils.get_response_body(delete_folder_response))

        code_desc = ClientUtils.get_code_and_description_from_response(
            delete_folder_response)
        self.assertEqual(
            expected_code_and_description, code_desc,
            'Expected ' + str(expected_code_and_description) + ' but got: ' +
            str(code_desc) + self.extra_data.get_all())

        file_system_entries, msg = TestUtils.get_external_partition(
            auth=self.auth,
            host_id=self.host_id,
            path=permanent_folder,
            extra_data=self.extra_data)
        self.assertIsNotNone(file_system_entries,
                             msg + self.extra_data.get_all())

        file_system_entries_names = [
            str(entry[self.partition_client.KEY_ENTRY_NAME])
            for entry in file_system_entries
            if entry['type'] == 'EXTERNAL_FOLDER'
        ]

        if folder_new_name in file_system_entries_names:
            self.fail(
                'Folder should have been deleted, and not found in partition result'
                + self.extra_data.get_all())

    def test_get_external_file_info_v2(self):
        file_name_in_box_folder = 'LiveView_Clean.dwg'

        external_file_info_response = self.files_management_client.get_external_file_info_v2(
            auth=self.auth, host_id=self.host_id, path=file_name_in_box_folder)
        status_code = ClientUtils.get_response_status_code(
            external_file_info_response)
        self.assertEqual(
            httplib.OK, status_code,
            'Got status code: ' + str(status_code) + self.extra_data.get_all())
        self.extra_data.add_test_data(
            'get_external_file_info response',
            ClientUtils.get_response_body(external_file_info_response))

        file_primary_version = ClientUtils.get_value_from_body(
            external_file_info_response,
            FilesManagementClient.KEY_PRIMARY_VERSION_ID)
        file_type = ClientUtils.get_value_from_body(
            external_file_info_response, FilesManagementClient.KEY_TYPE)
        file_size = ClientUtils.get_value_from_body(
            external_file_info_response, FilesManagementClient.KEY_SIZE)
        self.assertTrue(
            file_primary_version > 0,
            'Expected valid primary version id but got: ' +
            str(file_primary_version) + self.extra_data.get_all())
        self.assertEquals(
            'EXTERNAL_DRAWING', file_type,
            'Expected file type: EXTERNAL_DRAWING but got: ' + str(file_type) +
            self.extra_data.get_all())
        self.assertEquals(
            62, file_size, 'Expected file size: 62 but got: ' +
            str(file_size) + self.extra_data.get_all())

    def test_get_external_file_info(self):
        file_name_in_box_folder = 'LiveView_Clean.dwg'

        external_file_info_response = self.files_management_client.get_external_file_info(
            auth=self.auth, host_id=self.host_id, path=file_name_in_box_folder)
        status_code = ClientUtils.get_response_status_code(
            external_file_info_response)
        self.assertEqual(
            httplib.OK, status_code,
            'Got status code: ' + str(status_code) + self.extra_data.get_all())
        self.extra_data.add_test_data(
            'get_external_file_info response',
            ClientUtils.get_response_body(external_file_info_response))

        file_primary_version = ClientUtils.get_value_from_body(
            external_file_info_response,
            FilesManagementClient.KEY_PRIMARY_VERSION_ID)
        file_type = ClientUtils.get_value_from_body(
            external_file_info_response, FilesManagementClient.KEY_TYPE)
        file_size = ClientUtils.get_value_from_body(
            external_file_info_response, FilesManagementClient.KEY_SIZE)
        self.assertTrue(
            file_primary_version > 0,
            'Expected valid primary version id but got: ' +
            str(file_primary_version) + self.extra_data.get_all())
        self.assertEquals(
            'EXTERNAL_DRAWING', file_type,
            'Expected file type: EXTERNAL_DRAWING but got: ' + str(file_type) +
            self.extra_data.get_all())
        self.assertEquals(
            62, file_size, 'Expected file size: 62 but got: ' +
            str(file_size) + self.extra_data.get_all())

    def test_get_external_file_provider(self):
        file_name_in_box_folder = 'LiveView_Clean.dwg'

        external_file_info_response = self.files_management_client.get_external_file_provider_v2(
            auth=self.auth, host_id=self.host_id, path=file_name_in_box_folder)
        status_code = ClientUtils.get_response_status_code(
            external_file_info_response)
        self.assertEqual(
            httplib.OK, status_code,
            'Got status code: ' + str(status_code) + self.extra_data.get_all())
        self.extra_data.add_test_data(
            'get_external_file_provider response',
            ClientUtils.get_response_body(external_file_info_response))

        provider = ClientUtils.get_value_from_body(
            external_file_info_response, FilesManagementClient.KEY_PROVIDER)
        self.assertEquals(
            'BOX', provider, 'Expected provider: BOX but got: ' +
            str(provider) + self.extra_data.get_all())

    def test_move_file_to_external_folder_rename_and_delete_it_v2(self):
        folder_name = 'test_folder_external_file_flow_' + str(int(time()))
        file_name = 'test_file_external_file_flow_' + str(int(time())) + '.dwg'
        file_new_name = 'test_file_external_file_flow_renamed_' + str(
            int(time())) + '.dwg'
        permanent_folder = 'Permanent_Folder/'

        self.extra_data.add_test_data('folder name', folder_name)
        self.extra_data.add_test_data('file name', file_name)
        self.extra_data.add_test_data('file new name', file_new_name)

        success_code_and_description = (0, 'SUCCESS')
        cont_async_code_and_description = (
            23, 'FILESYSTEM OPERATION CONTINUES ASYNCRONOUSLY')

        polling_timeout_in_seconds = 30
        delay_between_polls = 1

        success, msg = TestUtils.create_external_folder(
            auth=self.auth,
            host_id=self.host_id,
            folder_path=permanent_folder,
            new_folder_name=folder_name,
            extra_data=self.extra_data)
        self.assertIsNotNone(success, msg + self.extra_data.get_all())

        folder_name = permanent_folder + folder_name
        self.extra_data.add_test_data('folder name', folder_name)

        created_file_id, msg = TestUtils.create_file(
            auth=self.auth, file_name=file_name, extra_data=self.extra_data)
        self.assertIsNotNone(created_file_id, msg + self.extra_data.get_all())

        move_to_external_folder_response = self.files_management_client.move_internal_file_to_external(
            auth=self.auth,
            file_id=created_file_id,
            to_host_id=self.host_id,
            to_path=folder_name + '/')
        status_code = ClientUtils.get_response_status_code(
            move_to_external_folder_response)
        self.assertEqual(
            httplib.OK, status_code,
            'Got status code: ' + str(status_code) + self.extra_data.get_all())
        self.extra_data.add_test_data(
            'move_internal_file_to_external response',
            ClientUtils.get_response_body(move_to_external_folder_response))

        code_desc = ClientUtils.get_code_and_description_from_response(
            move_to_external_folder_response)
        self.assertEqual(
            cont_async_code_and_description, code_desc,
            'Expected ' + str(cont_async_code_and_description) + ' but got: ' +
            str(code_desc) + self.extra_data.get_all())

        polling_id = ClientUtils.get_value_from_body(
            move_to_external_folder_response,
            FilesManagementClient.KEY_POLLING_ID)
        self.assertTrue(
            polling_id > 0, 'Expected valid polling id, but got: ' +
            str(polling_id) + self.extra_data.get_all())
        self.extra_data.add_test_data('polling id', polling_id)

        successful_move, msg = TestUtils.poll_for_move_to_external(
            auth=self.auth,
            polling_id=polling_id,
            sleep_period=delay_between_polls,
            timeout_in_seconds=polling_timeout_in_seconds,
            extra_data=self.extra_data)
        self.assertIsNotNone(successful_move, msg + self.extra_data.get_all())

        sleep(5)

        file_system_entries, msg = TestUtils.get_external_partition(
            auth=self.auth,
            host_id=self.host_id,
            path=folder_name,
            extra_data=self.extra_data)
        self.assertIsNotNone(file_system_entries,
                             msg + self.extra_data.get_all())

        file_system_entries_names = [
            str(entry[self.partition_client.KEY_ENTRY_NAME])
            for entry in file_system_entries
            if entry['type'] == 'EXTERNAL_DRAWING'
        ]
        if file_name not in file_system_entries_names:
            self.fail('New file should have been moved to external host' +
                      self.extra_data.get_all())

        internal_file_system_entries, msg = TestUtils.get_internal_partition(
            auth=self.auth, extra_data=self.extra_data)
        self.assertIsNotNone(internal_file_system_entries,
                             msg + self.extra_data.get_all())

        file_system_entries_names = [
            str(entry[self.partition_client.KEY_ENTRY_NAME])
            for entry in internal_file_system_entries
            if entry['type'] == 'DRAWING'
        ]
        if file_new_name in file_system_entries_names:
            self.fail(
                'File should have moved to external folder, and not found in internal partition result'
                + self.extra_data.get_all())

        file_relative_path = folder_name + '/' + file_name
        self.extra_data.add_test_data('file relative path', file_relative_path)
        rename_file_response = self.files_management_client.rename_external_file_v2(
            auth=self.auth,
            host_id=self.host_id,
            name=file_new_name,
            path=file_relative_path)
        status_code = ClientUtils.get_response_status_code(
            rename_file_response)
        self.assertEqual(
            httplib.OK, status_code,
            'Got status code: ' + str(status_code) + self.extra_data.get_all())
        self.extra_data.add_test_data(
            'rename_external_file response',
            ClientUtils.get_response_body(rename_file_response))

        code_desc = ClientUtils.get_code_and_description_from_response(
            rename_file_response)
        self.assertEqual(
            success_code_and_description, code_desc,
            'Expected ' + str(success_code_and_description) + ' but got: ' +
            str(code_desc) + self.extra_data.get_all())

        file_system_entries, msg = TestUtils.get_external_partition(
            auth=self.auth,
            host_id=self.host_id,
            path=folder_name,
            extra_data=self.extra_data)
        self.assertIsNotNone(file_system_entries,
                             msg + self.extra_data.get_all())

        file_system_entries_names = [
            str(entry[self.partition_client.KEY_ENTRY_NAME])
            for entry in file_system_entries
            if entry['type'] == 'EXTERNAL_DRAWING'
        ]

        if file_new_name not in file_system_entries_names:
            self.fail('File should have been renamed in external host' +
                      self.extra_data.get_all())

        file_relative_path = folder_name + '/' + file_new_name
        self.extra_data.add_test_data('file relative path', file_relative_path)

        delete_file_response = self.files_management_client.delete_external_file_v2(
            auth=self.auth, host_id=self.host_id, path=file_relative_path)
        status_code = ClientUtils.get_response_status_code(
            delete_file_response)
        self.assertEqual(
            httplib.OK, status_code,
            'Got status code: ' + str(status_code) + self.extra_data.get_all())
        self.extra_data.add_test_data(
            'delete_external_file response',
            ClientUtils.get_response_body(delete_file_response))

        code_desc = ClientUtils.get_code_and_description_from_response(
            delete_file_response)
        self.assertEqual(
            success_code_and_description, code_desc,
            'Expected ' + str(success_code_and_description) + ' but got: ' +
            str(code_desc) + self.extra_data.get_all())

        file_system_entries, msg = TestUtils.get_external_partition(
            auth=self.auth,
            host_id=self.host_id,
            path=folder_name,
            extra_data=self.extra_data)
        self.assertIsNotNone(file_system_entries,
                             msg + self.extra_data.get_all())

        file_system_entries_names = [
            str(entry[self.partition_client.KEY_ENTRY_NAME])
            for entry in file_system_entries
            if entry['type'] == 'EXTERNAL_DRAWING'
        ]

        if file_new_name in file_system_entries_names:
            self.fail(
                'Folder should have been deleted, and not found in partition result'
                + self.extra_data.get_all())

        # Teardown - remove created folder - does not affect test results
        self.folders_management_client.delete_external_folder_v2(
            auth=self.auth, host_id=self.host_id, path=folder_name)
コード例 #7
0
class FilesTests(TestCase):
    auth = None

    user_name = 'rest_tests_manage_files_' + str(int(time())) + '@autodesk.com'
    password = '******'
    first_name = 'Rest'
    last_name = 'Test'

    extra_data = None
    files_management_client = FilesManagementClient()

    def setUp(self):
        self.extra_data = ExtraDataManager()
        self.extra_data.add_test_data('user name', self.user_name)
        main_register_and_login_mixin = MainRegisterAndLoginMixin()
        if FilesTests.auth is None:
            response = main_register_and_login_mixin.login_or_register(
                user_name=self.user_name,
                password=self.password,
                first_name=self.first_name,
                last_name=self.last_name)
            FilesTests.auth = main_register_and_login_mixin.get_auth_from_login_data(
                response)
        self.assertIsInstance(
            FilesTests.auth, str, 'Invalid auth: ' + str(FilesTests.auth) +
            self.extra_data.get_all())

    def test_create_file(self):
        file_name = 'test_file_create_file_' + str(int(time())) + '.dwg'
        self.extra_data.add_test_data('file name', file_name)

        create_file_response = self.files_management_client.create_file(
            auth=self.auth, new_drawing_name=file_name)
        status_code = ClientUtils.get_response_status_code(
            create_file_response)
        self.assertEqual(
            httplib.OK, status_code,
            'Got status code: ' + str(status_code) + self.extra_data.get_all())
        self.extra_data.add_test_data(
            'create_file response',
            ClientUtils.get_response_body(create_file_response))

        response_file_id, response_file_name = ClientUtils.get_multiple_values_from_body(
            create_file_response, [
                FilesManagementClient.KEY_VERSION_ID,
                FilesManagementClient.KEY_NAME
            ])
        self.assertTrue(
            response_file_id > 0, 'Expected valid file id but got: ' +
            str(response_file_id) + self.extra_data.get_all())
        self.assertEqual(
            file_name, response_file_name,
            'Expected file name: ' + str(file_name) + 'but got: ' +
            str(response_file_name) + self.extra_data.get_all())

        self.extra_data.add_test_data('response file id', response_file_id)
        self.extra_data.add_test_data('response file name', response_file_name)

        file_system_entries, msg = TestUtils.get_internal_partition(
            auth=self.auth, extra_data=self.extra_data)
        self.assertIsNotNone(file_system_entries,
                             msg + self.extra_data.get_all())

        entry = TestUtils.get_entry_from_internal_file_system_entries(
            response_file_id, file_system_entries)
        self.assertIsNotNone(
            entry, 'Created file should exist in partition' +
            self.extra_data.get_all())

        partition_file_name = TestUtils.get_entry_data_by_keys(
            entry=entry, keys=PartitionClient.KEY_ENTRY_NAME)
        self.assertEqual(
            file_name, partition_file_name,
            'Expected file name: ' + str(file_name) + 'but got: ' +
            str(partition_file_name) + self.extra_data.get_all())

        partition_nitrous_id = TestUtils.get_entry_data_by_keys(
            entry=entry, keys=PartitionClient.KEY_NITROUS_ID)
        self.assertIsNotNone(
            partition_nitrous_id,
            'Expected nitrous ID not None' + self.extra_data.get_all())

    def test_create_file_v2(self):
        file_name = 'test_file_create_file_v2_' + str(int(time())) + '.dwg'
        self.extra_data.add_test_data('file name', file_name)

        create_file_response = self.files_management_client.create_file_v2(
            auth=self.auth, new_drawing_name=file_name)
        status_code = ClientUtils.get_response_status_code(
            create_file_response)
        self.assertEqual(
            httplib.OK, status_code,
            'Got status code: ' + str(status_code) + self.extra_data.get_all())
        self.extra_data.add_test_data(
            'create_file response',
            ClientUtils.get_response_body(create_file_response))

        response_file_id, response_file_name = ClientUtils.get_multiple_values_from_body(
            create_file_response, [
                FilesManagementClient.KEY_VERSION_ID,
                FilesManagementClient.KEY_NAME
            ])
        self.assertTrue(
            response_file_id > 0, 'Expected valid file id but got: ' +
            str(response_file_id) + self.extra_data.get_all())
        self.assertEqual(
            file_name, response_file_name,
            'Expected file name: ' + str(file_name) + 'but got: ' +
            str(response_file_name) + self.extra_data.get_all())

        self.extra_data.add_test_data('response file id', response_file_id)
        self.extra_data.add_test_data('response file name', response_file_name)

        file_system_entries, msg = TestUtils.get_internal_partition(
            auth=self.auth, extra_data=self.extra_data)
        self.assertIsNotNone(file_system_entries,
                             msg + self.extra_data.get_all())

        entry = TestUtils.get_entry_from_internal_file_system_entries(
            response_file_id, file_system_entries)
        self.assertIsNotNone(
            entry, 'Created file should exist in partition' +
            self.extra_data.get_all())

        partition_file_name = TestUtils.get_entry_data_by_keys(
            entry=entry, keys=PartitionClient.KEY_ENTRY_NAME)
        self.assertEqual(
            file_name, partition_file_name,
            'Expected file name: ' + str(file_name) + 'but got: ' +
            str(partition_file_name) + self.extra_data.get_all())

        partition_nitrous_id = TestUtils.get_entry_data_by_keys(
            entry=entry, keys=PartitionClient.KEY_NITROUS_ID)
        self.assertIsNotNone(
            partition_nitrous_id,
            'Expected nitrous ID not None' + self.extra_data.get_all())

    def test_rename_file_internal(self):
        file_name = 'test_file_rename_file_internal_' + str(int(
            time())) + '.dwg'
        file_new_name = 'test_file_rename_file_internal_renamed_' + str(
            int(time())) + '.dwg'
        expected_code_and_description = (0, 'SUCCESS')

        self.extra_data.add_test_data('file name', file_name)
        self.extra_data.add_test_data('file new name', file_new_name)

        created_file_id, msg = TestUtils.create_file(
            auth=self.auth, file_name=file_name, extra_data=self.extra_data)
        self.assertIsNotNone(created_file_id, msg + self.extra_data.get_all())

        rename_file_response = self.files_management_client.rename_file_internal(
            auth=self.auth, file_id=created_file_id, name=file_new_name)
        status_code = ClientUtils.get_response_status_code(
            rename_file_response)
        self.assertEqual(
            httplib.OK, status_code,
            'Got status code: ' + str(status_code) + self.extra_data.get_all())
        self.extra_data.add_test_data(
            'rename_file_internal response',
            ClientUtils.get_response_body(rename_file_response))

        code_desc = ClientUtils.get_code_and_description_from_response(
            rename_file_response)
        self.assertEqual(
            expected_code_and_description, code_desc,
            'Expected ' + str(expected_code_and_description) + ' but got: ' +
            str(code_desc) + self.extra_data.get_all())

        file_system_entries, msg = TestUtils.get_internal_partition(
            auth=self.auth, extra_data=self.extra_data)
        self.assertIsNotNone(file_system_entries,
                             msg + self.extra_data.get_all())

        entry = TestUtils.get_entry_from_internal_file_system_entries(
            created_file_id, file_system_entries)

        self.assertIsNotNone(
            entry, 'Renamed file should exist in partition' +
            self.extra_data.get_all())
        partition_file_name = TestUtils.get_entry_data_by_keys(
            entry=entry, keys=PartitionClient.KEY_ENTRY_NAME)
        self.assertEqual(
            file_new_name, partition_file_name,
            'Expected file name: ' + str(file_new_name) + ' but got: ' +
            str(partition_file_name) + self.extra_data.get_all())

    def test_rename_file_v2_internal(self):
        file_name = 'test_file_rename_file_v2_internal_' + str(int(
            time())) + '.dwg'
        file_new_name = 'test_file_rename_file_v2_internal_renamed_' + str(
            int(time())) + '.dwg'
        expected_code_and_description = (0, 'SUCCESS')

        self.extra_data.add_test_data('file name', file_name)
        self.extra_data.add_test_data('file new name', file_new_name)

        created_file_id, msg = TestUtils.create_file(
            auth=self.auth, file_name=file_name, extra_data=self.extra_data)
        self.assertIsNotNone(created_file_id, msg + self.extra_data.get_all())

        rename_file_response = self.files_management_client.rename_file_v2_internal(
            auth=self.auth, file_id=created_file_id, name=file_new_name)
        status_code = ClientUtils.get_response_status_code(
            rename_file_response)
        self.assertEqual(
            httplib.OK, status_code,
            'Got status code: ' + str(status_code) + self.extra_data.get_all())
        self.extra_data.add_test_data(
            'rename_file_internal response',
            ClientUtils.get_response_body(rename_file_response))

        code_desc = ClientUtils.get_code_and_description_from_response(
            rename_file_response)
        self.assertEqual(
            expected_code_and_description, code_desc,
            'Expected ' + str(expected_code_and_description) + ' but got: ' +
            str(code_desc) + self.extra_data.get_all())

        file_system_entries, msg = TestUtils.get_internal_partition(
            auth=self.auth, extra_data=self.extra_data)
        self.assertIsNotNone(file_system_entries,
                             msg + self.extra_data.get_all())

        entry = TestUtils.get_entry_from_internal_file_system_entries(
            created_file_id, file_system_entries)

        self.assertIsNotNone(
            entry, 'Renamed file should exist in partition' +
            self.extra_data.get_all())
        partition_file_name = TestUtils.get_entry_data_by_keys(
            entry=entry, keys=PartitionClient.KEY_ENTRY_NAME)
        self.assertEqual(
            file_new_name, partition_file_name,
            'Expected file name: ' + str(file_new_name) + ' but got: ' +
            str(partition_file_name) + self.extra_data.get_all())

    def test_copy_file_internal(self):
        file_name = 'test_file_copy_file_internal_' + str(int(time())) + '.dwg'
        file_new_name = 'test_file_copy_file_internal_copy' + str(int(
            time())) + '.dwg'
        expected_code_and_description = (0, 'SUCCESS')

        self.extra_data.add_test_data('file name', file_name)
        self.extra_data.add_test_data('file new name', file_new_name)

        created_file_id, msg = TestUtils.create_file(
            auth=self.auth, file_name=file_name, extra_data=self.extra_data)
        self.assertIsNotNone(created_file_id, msg + self.extra_data.get_all())

        copy_file_response = self.files_management_client.copy_file_internal(
            auth=self.auth,
            file_id=created_file_id,
            to_folder_id=0,
            rename_to=file_new_name)
        status_code = ClientUtils.get_response_status_code(copy_file_response)
        self.assertEqual(
            httplib.OK, status_code,
            'Got status code: ' + str(status_code) + self.extra_data.get_all())
        self.extra_data.add_test_data(
            'copy_file_internal response',
            ClientUtils.get_response_body(copy_file_response))

        code_desc = ClientUtils.get_code_and_description_from_response(
            copy_file_response)
        self.assertEqual(
            expected_code_and_description, code_desc,
            'Expected ' + str(expected_code_and_description) + ' but got: ' +
            str(code_desc) + self.extra_data.get_all())

        copied_file_id = ClientUtils.get_value_from_body(
            copy_file_response, FilesManagementClient.KEY_PRIMARY_WS_ID)
        self.assertTrue(
            copied_file_id > 0, 'Expected valid copied file id but got: ' +
            str(copied_file_id) + self.extra_data.get_all())
        self.extra_data.add_test_data('copied file id', copied_file_id)

        file_system_entries, msg = TestUtils.get_internal_partition(
            auth=self.auth, extra_data=self.extra_data)
        self.assertIsNotNone(file_system_entries,
                             msg + self.extra_data.get_all())

        entry_src = TestUtils.get_entry_from_internal_file_system_entries(
            entry_id=created_file_id,
            internal_file_system_entries=file_system_entries)
        entry_copy = TestUtils.get_entry_from_internal_file_system_entries(
            entry_id=copied_file_id,
            internal_file_system_entries=file_system_entries)
        self.assertIsNotNone(
            entry_src, 'Source file should still exist in partition' +
            self.extra_data.get_all())
        self.assertIsNotNone(
            entry_copy, 'Copied file should exist in partition' +
            self.extra_data.get_all())

        entry_src_name = TestUtils.get_entry_data_by_keys(
            entry=entry_src, keys=PartitionClient.KEY_ENTRY_NAME)
        entry_copy_name = TestUtils.get_entry_data_by_keys(
            entry=entry_copy, keys=PartitionClient.KEY_ENTRY_NAME)
        self.assertEqual(
            file_name, entry_src_name,
            'Expected source file name: ' + str(file_name) + ' but got: ' +
            str(entry_src_name) + self.extra_data.get_all())
        self.assertEqual(
            file_new_name, entry_copy_name,
            'Expected copy file name: ' + str(file_new_name) + ' but got: ' +
            str(entry_copy_name) + self.extra_data.get_all())

    def test_copy_file_v2_internal(self):
        file_name = 'test_file_copy_file_v2_internal_' + str(int(
            time())) + '.dwg'
        file_new_name = 'test_file_copy_file_v2_internal_copy' + str(
            int(time())) + '.dwg'
        expected_code_and_description = (0, 'SUCCESS')

        self.extra_data.add_test_data('file name', file_name)
        self.extra_data.add_test_data('file new name', file_new_name)

        created_file_id, msg = TestUtils.create_file(
            auth=self.auth, file_name=file_name, extra_data=self.extra_data)
        self.assertIsNotNone(created_file_id, msg + self.extra_data.get_all())

        copy_file_response = self.files_management_client.copy_file_v2_internal(
            auth=self.auth,
            file_id=created_file_id,
            to_folder_id=0,
            rename_to=file_new_name)
        status_code = ClientUtils.get_response_status_code(copy_file_response)
        self.assertEqual(
            httplib.OK, status_code,
            'Got status code: ' + str(status_code) + self.extra_data.get_all())
        self.extra_data.add_test_data(
            'copy_file_internal response',
            ClientUtils.get_response_body(copy_file_response))

        code_desc = ClientUtils.get_code_and_description_from_response(
            copy_file_response)
        self.assertEqual(
            expected_code_and_description, code_desc,
            'Expected ' + str(expected_code_and_description) + ' but got: ' +
            str(code_desc) + self.extra_data.get_all())

        copied_file_id = ClientUtils.get_value_from_body(
            copy_file_response, FilesManagementClient.KEY_PRIMARY_WS_ID)
        self.assertTrue(
            copied_file_id > 0, 'Expected valid copied file id but got: ' +
            str(copied_file_id) + self.extra_data.get_all())
        self.extra_data.add_test_data('copied file id', copied_file_id)

        file_system_entries, msg = TestUtils.get_internal_partition(
            auth=self.auth, extra_data=self.extra_data)
        self.assertIsNotNone(file_system_entries,
                             msg + self.extra_data.get_all())

        entry_src = TestUtils.get_entry_from_internal_file_system_entries(
            entry_id=created_file_id,
            internal_file_system_entries=file_system_entries)
        entry_copy = TestUtils.get_entry_from_internal_file_system_entries(
            entry_id=copied_file_id,
            internal_file_system_entries=file_system_entries)
        self.assertIsNotNone(
            entry_src, 'Source file should still exist in partition' +
            self.extra_data.get_all())
        self.assertIsNotNone(
            entry_copy, 'Copied file should exist in partition' +
            self.extra_data.get_all())

        entry_src_name = TestUtils.get_entry_data_by_keys(
            entry=entry_src, keys=PartitionClient.KEY_ENTRY_NAME)
        entry_copy_name = TestUtils.get_entry_data_by_keys(
            entry=entry_copy, keys=PartitionClient.KEY_ENTRY_NAME)
        self.assertEqual(
            file_name, entry_src_name,
            'Expected source file name: ' + str(file_name) + ' but got: ' +
            str(entry_src_name) + self.extra_data.get_all())
        self.assertEqual(
            file_new_name, entry_copy_name,
            'Expected copy file name: ' + str(file_new_name) + ' but got: ' +
            str(entry_copy_name) + self.extra_data.get_all())

    def test_move_file_internal(self):
        expected_code_and_description = (0, 'SUCCESS')
        file_name = 'test_file_move_file_internal_' + str(int(time())) + '.dwg'
        folder_name = 'test_folder_move_file_internal_' + str(int(time()))

        self.extra_data.add_test_data('file name', file_name)
        self.extra_data.add_test_data('folder name', folder_name)

        created_folder_id, msg = TestUtils.create_folder(
            auth=self.auth,
            folder_name=folder_name,
            extra_data=self.extra_data)
        self.assertIsNotNone(created_folder_id,
                             msg + self.extra_data.get_all())

        created_file_id, msg = TestUtils.create_file(
            auth=self.auth, file_name=file_name, extra_data=self.extra_data)
        self.assertIsNotNone(created_file_id, msg + self.extra_data.get_all())

        move_file_response = self.files_management_client.move_file_internal(
            auth=self.auth,
            file_id=created_file_id,
            to_folder_id=created_folder_id)
        status_code = ClientUtils.get_response_status_code(move_file_response)
        self.assertEqual(
            httplib.OK, status_code,
            'Got status code: ' + str(status_code) + self.extra_data.get_all())
        self.extra_data.add_test_data(
            'move_file_internal response',
            ClientUtils.get_response_body(move_file_response))

        code_desc = ClientUtils.get_code_and_description_from_response(
            move_file_response)
        self.assertEqual(
            expected_code_and_description, code_desc,
            'Expected ' + str(expected_code_and_description) + ' but got: ' +
            str(code_desc) + self.extra_data.get_all())

        file_system_entries, msg = TestUtils.get_internal_partition(
            auth=self.auth,
            partition_folder_id=created_folder_id,
            extra_data=self.extra_data)
        self.assertIsNotNone(file_system_entries,
                             msg + self.extra_data.get_all())

        entry = TestUtils.get_entry_from_internal_file_system_entries(
            created_file_id, file_system_entries)

        self.assertIsNotNone(
            entry, 'File should have moved to the new folder' +
            self.extra_data.get_all())
        partition_file_name = TestUtils.get_entry_data_by_keys(
            entry=entry, keys=PartitionClient.KEY_ENTRY_NAME)
        self.assertEqual(
            file_name, partition_file_name,
            'Expected file name: ' + str(file_name) + ' but got: ' +
            str(partition_file_name) + self.extra_data.get_all())

        file_system_entries, msg = TestUtils.get_internal_partition(
            auth=self.auth, extra_data=self.extra_data)
        self.assertIsNotNone(file_system_entries,
                             msg + self.extra_data.get_all())

        entry = TestUtils.get_entry_from_internal_file_system_entries(
            created_file_id, file_system_entries)

        self.assertIsNone(
            entry, 'File should no longer appear in root folder' +
            self.extra_data.get_all())

    def test_delete_file_internal(self):
        file_name = 'test_file_delete_file_internal_' + str(int(
            time())) + '.dwg'
        expected_code_and_description = (0, 'SUCCESS')

        self.extra_data.add_test_data('file name', file_name)

        created_file_id, msg = TestUtils.create_file(
            auth=self.auth, file_name=file_name, extra_data=self.extra_data)
        self.assertIsNotNone(created_file_id, msg + self.extra_data.get_all())

        delete_file_response = self.files_management_client.delete_file_internal(
            auth=self.auth, file_id=created_file_id)
        status_code = ClientUtils.get_response_status_code(
            delete_file_response)
        self.assertEqual(
            httplib.OK, status_code,
            'Got status code: ' + str(status_code) + self.extra_data.get_all())
        self.extra_data.add_test_data(
            'delete_file_internal response',
            ClientUtils.get_response_body(delete_file_response))

        code_desc = ClientUtils.get_code_and_description_from_response(
            delete_file_response)
        self.assertEqual(
            expected_code_and_description, code_desc,
            'Expected ' + str(expected_code_and_description) + ' but got: ' +
            str(code_desc) + self.extra_data.get_all())

        file_system_entries, msg = TestUtils.get_internal_partition(
            auth=self.auth, extra_data=self.extra_data)
        self.assertIsNotNone(file_system_entries,
                             msg + self.extra_data.get_all())

        entry = TestUtils.get_entry_from_internal_file_system_entries(
            created_file_id, file_system_entries)

        self.assertIsNone(
            entry, 'Deleted file should not be in partition' +
            self.extra_data.get_all())

    def test_recent_files(self):
        response = self.files_management_client.recent_files(self.auth)
        status_code = ClientUtils.get_response_status_code(response)
        self.assertEqual(
            httplib.OK, status_code,
            'Got status code: ' + str(status_code) + self.extra_data.get_all())
        self.extra_data.add_test_data('response',
                                      ClientUtils.get_response_body(response))

        self.assertTrue(
            ClientUtils.is_key_in_body(response, 'limit'),
            'Expected key limit in response body' + self.extra_data.get_all())
        self.assertTrue(
            ClientUtils.is_key_in_body(response, 'lastFileDate'),
            'Expected key lastFileDate in response body' +
            self.extra_data.get_all())
        self.assertTrue(
            ClientUtils.is_key_in_body(response, 'page'),
            'Expected key page in response body' + self.extra_data.get_all())

        drawings = ClientUtils.get_value_from_body(
            response, FilesManagementClient.KEY_DRAWINGS)
        self.assertTrue(
            len(drawings) > 0,
            'Expected at least one drawing in response body' +
            self.extra_data.get_all())
コード例 #8
0
class ShardingTests(TestCase):
    auth = None

    user_name = 'rest_tests_sharding_' + str(int(time())) + '@autodesk.com'
    password = '******'
    first_name = 'Rest'
    last_name = 'Test'

    extra_data = None
    files_management_client = FilesManagementClient()
    s3_client = S3Client()
    poll_client = PollClient()

    def setUp(self):
        self.extra_data = ExtraDataManager()
        self.extra_data.add_test_data('user name', self.user_name)
        main_register_and_login_mixin = MainRegisterAndLoginMixin()
        if ShardingTests.auth is None:
            response = main_register_and_login_mixin.login_or_register(
                user_name=self.user_name,
                password=self.password,
                first_name=self.first_name,
                last_name=self.last_name)
            ShardingTests.auth = main_register_and_login_mixin.get_auth_from_login_data(
                response)
        self.assertIsInstance(
            ShardingTests.auth, str, 'Invalid auth: ' +
            str(ShardingTests.auth) + self.extra_data.get_all())

    def test_get_url_to_upload_v1(self):
        file_name = 'LiveView_Clean.dwg'
        file_size = 64128

        url_to_upload_response = self.files_management_client.get_url_to_upload_v1(
            auth=self.auth,
            folder_id=0,
            file_name=file_name,
            file_size=file_size)
        status_code = ClientUtils.get_response_status_code(
            url_to_upload_response)
        self.assertEqual(
            httplib.OK, status_code,
            'Got status code: ' + str(status_code) + self.extra_data.get_all())
        self.extra_data.add_test_data(
            'get_url_to_upload response',
            ClientUtils.get_response_body(url_to_upload_response))

        version_id = ClientUtils.get_value_from_body(
            url_to_upload_response, FilesManagementClient.KEY_VERSION_ID)
        request_type = ClientUtils.get_value_from_body(
            url_to_upload_response, FilesManagementClient.KEY_REQUEST_TYPE)
        upload_url = ClientUtils.get_value_from_body(
            url_to_upload_response, FilesManagementClient.KEY_URL_TO_UPLOAD)
        header_x_amz_date = ClientUtils.get_value_from_body(
            url_to_upload_response, json_path='headers.x-amz-date')
        header_x_amz_acl = ClientUtils.get_value_from_body(
            url_to_upload_response, json_path='headers.x-amz-acl')
        header_authorization = ClientUtils.get_value_from_body(
            url_to_upload_response, json_path='headers.Authorization')
        headers_content_type = ClientUtils.get_value_from_body(
            url_to_upload_response, json_path='headers.Content-Type')

        self.assertTrue(
            version_id > 0, 'Expected valid version id but got: ' +
            str(version_id) + self.extra_data.get_all())
        self.extra_data.add_test_data('version id', version_id)

        self.assertEqual(
            'PUT', request_type, 'Expected request type PUT but got: ' +
            str(request_type) + self.extra_data.get_all())

        self.assertTrue(
            len(upload_url) > 0, 'Expected non empty upload url but got: ' +
            str(upload_url) + self.extra_data.get_all())

        self.assertTrue(
            header_x_amz_date > 0, 'Expected valid date but got: ' +
            str(header_x_amz_date) + self.extra_data.get_all())

        self.assertEqual(
            'authenticated-read', header_x_amz_acl,
            'Expected x-amz-acl header: authenticated-read but got: ' +
            str(header_x_amz_acl) + self.extra_data.get_all())

        self.assertTrue(
            len(header_authorization) > 0,
            'Expected at least one authorization header but got: ' +
            str(header_authorization) + self.extra_data.get_all())

        self.assertEqual(
            'application/octet-stream', headers_content_type,
            'Expected content-type header: ' + str(headers_content_type) +
            ' but got: ' + str(headers_content_type) +
            self.extra_data.get_all())

    def test_upload_file_to_s3_and_compress_dwg(self):
        file_name = 'LiveView_Clean.dwg'
        file_full_path = settings.BASE_DIR + '/rest_test/main_rest_tests/sharding/testfiles/' + file_name
        file_size = 64128
        compression_type = 1
        polling_timeout_in_seconds = 30
        delay_between_polls = 1

        self.upload_file_to_s3_and_compress(compression_type,
                                            delay_between_polls,
                                            file_full_path, file_name,
                                            file_size,
                                            polling_timeout_in_seconds)

    def test_upload_file_to_s3_and_compress_bmp(self):
        file_name = 'BMP-25.bmp'
        file_full_path = settings.BASE_DIR + '/rest_test/main_rest_tests/sharding/testfiles/' + file_name
        file_size = 264978
        compression_type = 4
        polling_timeout_in_seconds = 30
        delay_between_polls = 1

        self.upload_file_to_s3_and_compress(compression_type,
                                            delay_between_polls,
                                            file_full_path, file_name,
                                            file_size,
                                            polling_timeout_in_seconds)

    def test_upload_file_to_s3_and_compress_jpg(self):
        file_name = 'background.jpg'
        file_full_path = settings.BASE_DIR + '/rest_test/main_rest_tests/sharding/testfiles/' + file_name
        file_size = 87965
        compression_type = 4
        polling_timeout_in_seconds = 30
        delay_between_polls = 1

        self.upload_file_to_s3_and_compress(compression_type,
                                            delay_between_polls,
                                            file_full_path, file_name,
                                            file_size,
                                            polling_timeout_in_seconds)

    def test_upload_file_to_s3_and_compress_png(self):
        file_name = 'PngImage.png'
        file_full_path = settings.BASE_DIR + '/rest_test/main_rest_tests/sharding/testfiles/' + file_name
        file_size = 44454
        compression_type = 4
        polling_timeout_in_seconds = 30
        delay_between_polls = 1

        self.upload_file_to_s3_and_compress(compression_type,
                                            delay_between_polls,
                                            file_full_path, file_name,
                                            file_size,
                                            polling_timeout_in_seconds)

    def test_upload_file_to_s3_and_compress_gif(self):
        file_name = 'GifImage.gif'
        file_full_path = settings.BASE_DIR + '/rest_test/main_rest_tests/sharding/testfiles/' + file_name
        file_size = 42340
        compression_type = 4
        polling_timeout_in_seconds = 30
        delay_between_polls = 1

        self.upload_file_to_s3_and_compress(compression_type,
                                            delay_between_polls,
                                            file_full_path, file_name,
                                            file_size,
                                            polling_timeout_in_seconds)

    def test_upload_file_to_s3_and_compress_tif(self):
        file_name = 'TifImage.tif'
        file_full_path = settings.BASE_DIR + '/rest_test/main_rest_tests/sharding/testfiles/' + file_name
        file_size = 71189
        compression_type = 4
        polling_timeout_in_seconds = 30
        delay_between_polls = 1

        self.upload_file_to_s3_and_compress(compression_type,
                                            delay_between_polls,
                                            file_full_path, file_name,
                                            file_size,
                                            polling_timeout_in_seconds)

    # --- Currently sharding of font files is not working, un-comment when fixed ---
    # def test_upload_file_to_s3_and_compress_ttf(self):
    #     file_name = '47564.ttf'
    #     file_full_path = settings.BASE_DIR + '/rest_test/main_rest_tests/sharding/testfiles/' + file_name
    #     file_size = 16086
    #     compression_type = 5
    #     polling_timeout_in_seconds = 30
    #     delay_between_polls = 1
    #
    #     self.upload_file_to_s3_and_compress(compression_type, delay_between_polls, file_full_path, file_name, file_size,
    #                                         polling_timeout_in_seconds)

    def test_upload_file_to_s3_and_compress_pdf(self):
        file_name = 'LineTransparency.pdf'
        file_full_path = settings.BASE_DIR + '/rest_test/main_rest_tests/sharding/testfiles/' + file_name
        file_size = 59041
        compression_type = 11
        polling_timeout_in_seconds = 30
        delay_between_polls = 1

        self.upload_file_to_s3_and_compress(compression_type,
                                            delay_between_polls,
                                            file_full_path, file_name,
                                            file_size,
                                            polling_timeout_in_seconds)

    def test_upload_file_to_s3_and_compress_shx(self):
        file_name = 'mvt-mirym.shx'
        file_full_path = settings.BASE_DIR + '/rest_test/main_rest_tests/sharding/testfiles/' + file_name
        file_size = 27058
        compression_type = 5
        polling_timeout_in_seconds = 30
        delay_between_polls = 1

        self.upload_file_to_s3_and_compress(compression_type,
                                            delay_between_polls,
                                            file_full_path, file_name,
                                            file_size,
                                            polling_timeout_in_seconds)

    def upload_file_to_s3_and_compress(self, compression_type,
                                       delay_between_polls, file_full_path,
                                       file_name, file_size,
                                       polling_timeout_in_seconds):
        url_to_upload_response = self.files_management_client.get_url_to_upload_v1(
            auth=self.auth,
            folder_id=0,
            file_name=file_name,
            file_size=file_size)
        status_code = ClientUtils.get_response_status_code(
            url_to_upload_response)
        self.assertEqual(
            httplib.OK, status_code,
            'Got status code: ' + str(status_code) + self.extra_data.get_all())
        self.extra_data.add_test_data(
            'get_url_to_upload response',
            ClientUtils.get_response_body(url_to_upload_response))
        version_id = ClientUtils.get_value_from_body(
            url_to_upload_response, FilesManagementClient.KEY_VERSION_ID)
        request_type = ClientUtils.get_value_from_body(
            url_to_upload_response, FilesManagementClient.KEY_REQUEST_TYPE)
        upload_url = ClientUtils.get_value_from_body(
            url_to_upload_response, FilesManagementClient.KEY_URL_TO_UPLOAD)
        header_x_amz_acl = ClientUtils.get_value_from_body(
            url_to_upload_response, json_path='headers.x-amz-acl')
        header_authorization = ClientUtils.get_value_from_body(
            url_to_upload_response, json_path='headers.Authorization')
        header_content_type = ClientUtils.get_value_from_body(
            url_to_upload_response, json_path='headers.Content-Type')
        header_x_amz_date = ClientUtils.get_value_from_body(
            url_to_upload_response, json_path='headers.x-amz-date')
        self.extra_data.add_test_data('version id', version_id)
        self.extra_data.add_test_data('request type', request_type)
        self.extra_data.add_test_data('upload url', upload_url)
        self.extra_data.add_test_data('header x_amz_acl', header_x_amz_acl)
        self.extra_data.add_test_data('header authorization',
                                      header_authorization)
        self.extra_data.add_test_data('header content_type',
                                      header_content_type)
        self.extra_data.add_test_data('header x_amz_date', header_x_amz_date)

        upload_to_s3_response = self.s3_client.upload_to_s3(
            file_full_path=file_full_path,
            url_to_upload=upload_url,
            method=request_type,
            acl=header_x_amz_acl,
            auth=header_authorization,
            date=header_x_amz_date,
            content_type=header_content_type)
        status_code = ClientUtils.get_response_status_code(
            upload_to_s3_response)
        self.assertEqual(
            httplib.OK, status_code,
            'Got status code: ' + str(status_code) + self.extra_data.get_all())

        upload_to_compressor_response = self.files_management_client.upload_to_compressor(
            auth=self.auth,
            version_id=version_id,
            compression_type=compression_type)
        status_code = ClientUtils.get_response_status_code(
            upload_to_compressor_response)
        self.assertEqual(
            httplib.NO_CONTENT, status_code,
            'Got status code: ' + str(status_code) + self.extra_data.get_all())

        successful_upload, msg = TestUtils.poll_for_upload(
            auth=self.auth,
            version_id=version_id,
            sleep_period=delay_between_polls,
            timeout_in_seconds=polling_timeout_in_seconds,
            extra_data=self.extra_data)
        self.assertIsNotNone(successful_upload,
                             msg + self.extra_data.get_all())

        return version_id

    def test_download_file(self):
        polling_timeout_in_seconds = 30
        delay_between_polls = 1

        file_system_entries, msg = TestUtils.get_internal_partition(
            auth=self.auth, extra_data=self.extra_data)
        self.assertIsNotNone(file_system_entries,
                             msg + self.extra_data.get_all())
        entry = TestUtils.get_first_drawing_from_internal_file_system(
            file_system_entries)
        self.extra_data.add_test_data('entry', entry)

        version_id_to_download = TestUtils.get_entry_data_by_keys(
            entry, 'versionId')
        self.assertTrue(
            version_id_to_download > 0, 'Expected valid version id but got: ' +
            str(version_id_to_download) + self.extra_data.get_all())
        self.extra_data.add_test_data('version id to download',
                                      version_id_to_download)

        prepare_file_to_download_response = self.files_management_client.prepare_file_to_download(
            auth=self.auth, version_id=version_id_to_download)
        status_code = ClientUtils.get_response_status_code(
            prepare_file_to_download_response)
        self.assertEqual(
            httplib.ACCEPTED, status_code,
            'Got status code: ' + str(status_code) + self.extra_data.get_all())
        self.extra_data.add_test_data(
            'prepare_file_to_download response',
            ClientUtils.get_response_body(prepare_file_to_download_response))

        download_id = ClientUtils.get_value_from_body(
            prepare_file_to_download_response,
            FilesManagementClient.KEY_DOWNLOAD_ID)
        self.assertIsInstance(
            download_id, unicode, 'Expected unicode download id but got: ' +
            str(download_id) + self.extra_data.get_all())
        self.extra_data.add_test_data('download id', download_id)

        default_name, msg = TestUtils.poll_for_download(
            auth=self.auth,
            download_id=download_id,
            sleep_period=delay_between_polls,
            timeout_in_seconds=polling_timeout_in_seconds,
            extra_data=self.extra_data)
        self.assertIsNotNone(default_name, msg + self.extra_data.get_all())

        download_response = self.files_management_client.download_file(
            auth=self.auth,
            download_id=download_id,
            download_file_name=default_name)
        status_code = ClientUtils.get_response_status_code(download_response)
        self.assertEqual(
            httplib.OK, status_code,
            'Got status code: ' + str(status_code) + self.extra_data.get_all())

        downloaded_content = ClientUtils.get_response_raw_content(
            download_response)
        self.assertIsNotNone(
            downloaded_content,
            'Expected non empty content download' + self.extra_data.get_all())

    def test_plot_and_send_to_mail(self):  # workflow for web-client plotting
        polling_timeout_in_seconds = 30
        delay_between_polls = 1
        send_to = settings.GMAIL_USER_NAME
        password = settings.GMAIL_PASSWORD

        file_system_entries, msg = TestUtils.get_internal_partition(
            auth=self.auth, extra_data=self.extra_data)
        self.assertIsNotNone(file_system_entries,
                             msg + self.extra_data.get_all())
        entry = TestUtils.get_first_drawing_from_internal_file_system(
            file_system_entries)
        self.extra_data.add_test_data('entry', entry)

        version_id_to_plot = TestUtils.get_entry_data_by_keys(
            entry, 'versionId')
        self.assertTrue(
            version_id_to_plot > 0, 'Expected valid version id but got: ' +
            str(version_id_to_plot) + self.extra_data.get_all())
        self.extra_data.add_test_data('version id to plot', version_id_to_plot)

        plot_and_send_to_mail_response = self.files_management_client.plot_and_send_to_mail(
            auth=self.auth, version_id=version_id_to_plot, send_to=send_to)
        status_code = ClientUtils.get_response_status_code(
            plot_and_send_to_mail_response)
        self.assertEqual(
            httplib.ACCEPTED, status_code,
            'Got status code: ' + str(status_code) + self.extra_data.get_all())
        self.extra_data.add_test_data(
            'plot_and_send_to_mail response',
            ClientUtils.get_response_body(plot_and_send_to_mail_response))

        download_id = ClientUtils.get_value_from_body(
            plot_and_send_to_mail_response,
            FilesManagementClient.KEY_DOWNLOAD_ID)
        self.assertIsInstance(
            download_id, unicode, 'Expected unicode download id but got: ' +
            str(download_id) + self.extra_data.get_all())
        self.extra_data.add_test_data('download id', download_id)

        default_name, msg = TestUtils.poll_for_plot(
            auth=self.auth,
            version_id=download_id,
            sleep_period=delay_between_polls,
            timeout_in_seconds=polling_timeout_in_seconds,
            extra_data=self.extra_data)

        self.assertIsNotNone(default_name, msg + self.extra_data.get_all())

        sleep(20)  # wait for email to be sent

        gmail_client = GmailClient()
        try:
            gmail_client.connect_to_account(send_to, password)
        except Exception as e:
            self.fail('Could not connect to mail account ' + str(send_to) +
                      ' to verify mail was sent after plot. Exception msg: ' +
                      str(e.message) + '. Exception args: ' + str(e.args) +
                      self.extra_data.get_all())
        self.assertTrue(
            gmail_client.open_label('INBOX'),
            'Failed to open INBOX label in ' + str(send_to) +
            self.extra_data.get_all())
        expected_mail_subject = default_name + ' was sent to you by ' + self.first_name + ' ' + self.last_name
        self.extra_data.add_test_data('expected mail subject',
                                      expected_mail_subject)
        self.assertIsNotNone(
            gmail_client.search_mails_in_label(
                subject_to_search=expected_mail_subject),
            'Could not find sent mail in ' + str(send_to) + ' INBOX' +
            self.extra_data.get_all())

    def test_plot_and_download(self):  # workflow for mobile-client plotting
        polling_timeout_in_seconds = 30
        delay_between_polls = 1

        file_system_entries, msg = TestUtils.get_internal_partition(
            auth=self.auth, extra_data=self.extra_data)
        self.assertIsNotNone(file_system_entries,
                             msg + self.extra_data.get_all())
        entry = TestUtils.get_first_drawing_from_internal_file_system(
            file_system_entries)
        self.extra_data.add_test_data('entry', entry)

        version_id_to_plot = TestUtils.get_entry_data_by_keys(
            entry, 'versionId')
        self.assertTrue(
            version_id_to_plot > 0, 'Expected integer version id but got: ' +
            str(version_id_to_plot) + self.extra_data.get_all())
        self.extra_data.add_test_data('version id to plot', version_id_to_plot)

        prepare_file_to_plot_response = self.files_management_client.prepare_file_to_download(
            auth=self.auth, version_id=version_id_to_plot, format='plot')
        status_code = ClientUtils.get_response_status_code(
            prepare_file_to_plot_response)
        self.assertEqual(
            httplib.ACCEPTED, status_code,
            'Got status code: ' + str(status_code) + self.extra_data.get_all())
        self.extra_data.add_test_data(
            'prepare_file_to_download response',
            ClientUtils.get_response_body(prepare_file_to_plot_response))

        download_id = ClientUtils.get_value_from_body(
            prepare_file_to_plot_response,
            FilesManagementClient.KEY_DOWNLOAD_ID)
        self.assertIsInstance(
            download_id, unicode, 'Expected unicode download id but got: ' +
            str(download_id) + self.extra_data.get_all())
        self.extra_data.add_test_data('download id', download_id)

        default_name, msg = TestUtils.poll_for_download(
            auth=self.auth,
            download_id=download_id,
            sleep_period=delay_between_polls,
            timeout_in_seconds=polling_timeout_in_seconds,
            extra_data=self.extra_data)
        self.assertIsNotNone(default_name, msg + self.extra_data.get_all())

        download_response = self.files_management_client.download_file(
            auth=self.auth,
            download_id=download_id,
            download_file_name=default_name)
        status_code = ClientUtils.get_response_status_code(download_response)
        self.assertEqual(
            httplib.OK, status_code,
            'Got status code: ' + str(status_code) + self.extra_data.get_all())

        downloaded_content = ClientUtils.get_response_raw_content(
            download_response)
        self.assertIsNotNone(
            downloaded_content,
            'Expected non empty content download' + self.extra_data.get_all())

    def test_get_xrefs_uploaded_as_zip(self):
        zip_file_name_without_extension = 'xref with block - Standard'
        zip_file_name = zip_file_name_without_extension + '.zip'
        zip_file_full_path = settings.BASE_DIR + '/rest_test/main_rest_tests/sharding/testfiles/' + zip_file_name
        zip_file_size = 108960

        file_name_with_xrefs = 'xref with block.dwg'
        file_xref_name = '\one block.dwg'

        compression_type = 8
        polling_timeout_in_seconds = 60
        delay_between_polls = 2

        self.upload_file_to_s3_and_compress(compression_type,
                                            delay_between_polls,
                                            zip_file_full_path, zip_file_name,
                                            zip_file_size,
                                            polling_timeout_in_seconds)

        # Must wait for all files in zip to upload. No better way, since urlToUpload resource returns only 1 version id
        sleep(20)

        root_file_system_entries, msg = TestUtils.get_internal_partition(
            auth=self.auth, extra_data=self.extra_data)
        self.assertIsNotNone(root_file_system_entries,
                             msg + self.extra_data.get_all())

        xrefs_folder_version_id = None
        for entry in root_file_system_entries:
            if entry['name'] == zip_file_name_without_extension and entry[
                    'type'] == 'FOLDER':
                xrefs_folder_version_id = entry[
                    PartitionClient.
                    KEY_FOLDER_ID]  # created when zip was uploaded
                break
        self.assertIsNotNone(
            xrefs_folder_version_id, 'Expected a new folder created named ' +
            str(zip_file_name_without_extension) + self.extra_data.get_all())
        self.extra_data.add_test_data('xrefs folder version id',
                                      xrefs_folder_version_id)

        file_system_entries, msg = TestUtils.get_internal_partition(
            auth=self.auth,
            partition_folder_id=xrefs_folder_version_id,
            extra_data=self.extra_data)
        self.assertIsNotNone(file_system_entries,
                             msg + self.extra_data.get_all())

        file_with_xrefs_version_id = None
        for entry in file_system_entries:
            if entry['name'] == file_name_with_xrefs and entry[
                    'type'] == 'DRAWING':
                file_with_xrefs_version_id = entry[
                    PartitionClient.KEY_PRIMARY_VERSION_ID]
                break
        self.assertIsNotNone(
            file_with_xrefs_version_id,
            'Expected the new file named ' + str(file_name_with_xrefs) +
            ' uploaded into folder' + self.extra_data.get_all())
        self.extra_data.add_test_data('file with xrefs version id',
                                      file_with_xrefs_version_id)

        xrefs_client = XrefsClient()
        get_xrefs_response = xrefs_client.get_all_xrefs(
            auth=self.auth, version_id=file_with_xrefs_version_id)
        status_code = ClientUtils.get_response_status_code(get_xrefs_response)
        self.assertEqual(
            httplib.OK, status_code,
            'Got status code: ' + str(status_code) + self.extra_data.get_all())

        response_xrefs = ClientUtils.get_response_body(get_xrefs_response)
        self.assertIsNotNone(
            response_xrefs, 'Expected non empty get_all_xrefs response body' +
            self.extra_data.get_all())

        self.assertTrue(
            len(response_xrefs) > 0, 'Expected at least one xref, but got: ' +
            str(response_xrefs) + self.extra_data.get_all())
        self.extra_data.add_test_data('get_all_xrefs response', response_xrefs)

        for xref in response_xrefs:
            xref_name = xref['name']
            xref_is_missing = xref['missing']
            xref_type = xref['type']
            self.assertEqual(
                file_xref_name, xref_name,
                'Expected xref name: ' + str(file_xref_name) + ' but got: ' +
                str(xref_name) + self.extra_data.get_all())
            self.assertFalse(
                xref_is_missing,
                'Xref was uploaded to s3, should not be missing' +
                self.extra_data.get_all())
            self.assertIsNotNone(
                xref_type,
                'Expected non empty xref type' + self.extra_data.get_all())

    def test_get_xrefs_all_missing(self):
        file_name = 'xref with block.dwg'
        file_full_path = settings.BASE_DIR + '/rest_test/main_rest_tests/sharding/testfiles/file_with_xref/' + file_name
        file_size = 64687
        file_xref_name = '\one block.dwg'

        compression_type = 1
        polling_timeout_in_seconds = 60
        delay_between_polls = 2

        version_id = self.upload_file_to_s3_and_compress(
            compression_type, delay_between_polls, file_full_path, file_name,
            file_size, polling_timeout_in_seconds)

        xrefs_client = XrefsClient()
        get_xrefs_response = xrefs_client.get_all_xrefs(auth=self.auth,
                                                        version_id=version_id)
        status_code = ClientUtils.get_response_status_code(get_xrefs_response)
        self.assertEqual(
            httplib.OK, status_code,
            'Got status code: ' + str(status_code) + self.extra_data.get_all())

        response_xrefs = ClientUtils.get_response_body(get_xrefs_response)
        self.assertIsNotNone(
            response_xrefs, 'Expected non empty get_all_xrefs response body' +
            self.extra_data.get_all())

        self.assertTrue(
            len(response_xrefs) > 0, 'Expected at least one xref, but got: ' +
            str(response_xrefs) + self.extra_data.get_all())
        self.extra_data.add_test_data('get_all_xrefs response', response_xrefs)

        for xref in response_xrefs:
            xref_name = xref['name']
            xref_is_missing = xref['missing']
            xref_type = xref['type']
            self.assertEqual(
                file_xref_name, xref_name,
                'Expected xref name: ' + str(file_xref_name) + ' but got: ' +
                str(xref_name) + self.extra_data.get_all())
            self.assertTrue(
                xref_is_missing,
                'Xref was not uploaded to s3, should be missing' +
                self.extra_data.get_all())
            self.assertIsNotNone(
                xref_type,
                'Expected non empty xref type' + self.extra_data.get_all())