def test_extract_parameters(self):
        tests = [{
            'input': {},
            'expected': {},
            'name': 'empty'
        }, {
            'input': {
                'resource_group_name': 'foo',
            },
            'expected': {
                'resource_group_name': 'foo',
            },
            'name': 'resource_group'
        }, {
            'input': {
                'resource_type': 'foo',
            },
            'expected': {},
            'name': 'missing resource_group'
        }, {
            'input': {
                'resource_group_name': 'foo',
                'resource_type': 'bar',
            },
            'expected': {
                'resource_group_name': 'foo',
            },
            'name': 'missing resource_name'
        }, {
            'input': {
                'resource_group_name': 'foo',
                'resource_name': 'baz',
                'resource_type': 'bar',
            },
            'expected': {
                'resource_group_name': 'foo',
                'resource_name': 'baz',
                'resource_type': 'bar',
            },
            'name': 'missing resource_name'
        }, {
            'input': {
                'resource_group_name': 'foo',
                'resource_name': 'baz',
                'resource_type': 'bar/blah',
            },
            'expected': {
                'resource_group_name': 'foo',
                'resource_name': 'baz',
                'resource_type': 'blah',
                'resource_provider_namespace': 'bar'
            },
            'name': 'slashes'
        }, {
            'input': {
                'resource_group_name': 'foo',
                'resource_name': 'baz',
                'resource_type': 'blah',
                'resource_provider_namespace': 'bar'
            },
            'expected': {
                'resource_group_name': 'foo',
                'resource_name': 'baz',
                'resource_type': 'blah',
                'resource_provider_namespace': 'bar'
            },
            'name': 'separate'
        }, {
            'input': {
                'resource_group_name': 'foo',
                'resource_name': 'baz',
                'resource_type': 'blah/bug',
                'resource_provider_namespace': 'bar'
            },
            'expected': {
                'resource_group_name': 'foo',
                'resource_name': 'baz',
                'resource_type': 'blah/bug',
                'resource_provider_namespace': 'bar'
            },
            'name': 'separate'
        }]

        for test in tests:
            resource_group_name = test['input'].get('resource_group_name',
                                                    None)
            resource_type = test['input'].get('resource_type', None)
            resource_name = test['input'].get('resource_name', None)
            resource_provider_namespace = test['input'].get(
                'resource_provider_namespace', None)

            output = _extract_lock_params(resource_group_name,
                                          resource_provider_namespace,
                                          resource_type, resource_name)

            resource_group_name = test['expected'].get('resource_group_name',
                                                       None)
            resource_type = test['expected'].get('resource_type', None)
            resource_name = test['expected'].get('resource_name', None)
            resource_provider_namespace = test['expected'].get(
                'resource_provider_namespace', None)

            self.assertEqual(resource_group_name, output[0], test['name'])
            self.assertEqual(resource_name, output[1], test['name'])
            self.assertEqual(resource_provider_namespace, output[2],
                             test['name'])
            self.assertEqual(resource_type, output[3], test['name'])
    def test_extract_parameters(self):
        tests = [
            {
                'input': {},
                'expected': {},
                'name': 'empty'
            },
            {
                'input': {
                    'resource_group_name': 'foo',
                },
                'expected': {
                    'resource_group_name': 'foo',
                },
                'name': 'resource_group'
            },
            {
                'input': {
                    'resource_type': 'foo',
                },
                'expected': {},
                'name': 'missing resource_group'
            },
            {
                'input': {
                    'resource_group_name': 'foo',
                    'resource_type': 'bar',
                },
                'expected': {
                    'resource_group_name': 'foo',
                },
                'name': 'missing resource_name'
            },
            {
                'input': {
                    'resource_group_name': 'foo',
                    'resource_name': 'baz',
                    'resource_type': 'bar',
                },
                'expected': {
                    'resource_group_name': 'foo',
                    'resource_name': 'baz',
                    'resource_type': 'bar',
                },
                'name': 'missing resource_name'
            },
            {
                'input': {
                    'resource_group_name': 'foo',
                    'resource_name': 'baz',
                    'resource_type': 'bar/blah',
                },
                'expected': {
                    'resource_group_name': 'foo',
                    'resource_name': 'baz',
                    'resource_type': 'blah',
                    'resource_provider_namespace': 'bar'
                },
                'name': 'slashes'
            },
            {
                'input': {
                    'resource_group_name': 'foo',
                    'resource_name': 'baz',
                    'resource_type': 'blah',
                    'resource_provider_namespace': 'bar'
                },
                'expected': {
                    'resource_group_name': 'foo',
                    'resource_name': 'baz',
                    'resource_type': 'blah',
                    'resource_provider_namespace': 'bar'
                },
                'name': 'separate'
            },
            {
                'input': {
                    'resource_group_name': 'foo',
                    'resource_name': 'baz',
                    'resource_type': 'blah/bug',
                    'resource_provider_namespace': 'bar'
                },
                'expected': {
                    'resource_group_name': 'foo',
                    'resource_name': 'baz',
                    'resource_type': 'blah/bug',
                    'resource_provider_namespace': 'bar'
                },
                'name': 'separate'
            }

        ]

        for test in tests:
            resource_group_name = test['input'].get('resource_group_name', None)
            resource_type = test['input'].get('resource_type', None)
            resource_name = test['input'].get('resource_name', None)
            resource_provider_namespace = test['input'].get('resource_provider_namespace', None)

            output = _extract_lock_params(resource_group_name, resource_provider_namespace,
                                          resource_type, resource_name)

            resource_group_name = test['expected'].get('resource_group_name', None)
            resource_type = test['expected'].get('resource_type', None)
            resource_name = test['expected'].get('resource_name', None)
            resource_provider_namespace = test['expected'].get('resource_provider_namespace', None)

            self.assertEqual(resource_group_name, output[0], test['name'])
            self.assertEqual(resource_name, output[1], test['name'])
            self.assertEqual(resource_provider_namespace, output[2], test['name'])
            self.assertEqual(resource_type, output[3], test['name'])