Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 9 additions & 3 deletions src/azure-cli/azure/cli/command_modules/network/custom.py
Original file line number Diff line number Diff line change
Expand Up @@ -2046,11 +2046,17 @@ def import_zone(cmd, resource_group_name, zone_name, file_name):
logger.warning("In the future, zone name will be case insensitive.")
RecordSet = cmd.get_models('RecordSet', resource_type=ResourceType.MGMT_NETWORK_DNS)

from azure.cli.core.azclierror import FileOperationError
from azure.cli.core.azclierror import FileOperationError, UnknownError
try:
file_text = read_file_content(file_name)
except FileNotFoundError as e:
raise FileOperationError(e)
except FileNotFoundError:
raise FileOperationError("No such file: " + str(file_name))
except IsADirectoryError:
raise FileOperationError("Is a directory: " + str(file_name))
except PermissionError:
raise FileOperationError("Permission denied: " + str(file_name))
except OSError as e:
raise UnknownError(e)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We need UnclassifieduserFault here, but wait me to get this PR #15865 merged first


zone_obj = parse_zone_file(file_text, zone_name)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,12 +61,41 @@ def _test_zone(self, zone_name, filename):

@live_only()
@ResourceGroupPreparer(name_prefix='test_dns_import_file_not_found')
def test_dns_import_file_not_found(self, resource_group):
def test_dns_import_file_operation_error(self, resource_group):
import sys
if sys.platform != 'linux':
self.skip('This test should run on Linux platform')

from azure.cli.core.azclierror import FileOperationError
with self.assertRaises(FileOperationError) as e:
with self.assertRaisesRegexp(FileOperationError, 'No such file: ') as e:
self._test_zone('404zone.com', 'non_existing_zone_description_file.txt')
self.assertEqual(e.errno, 1)

with self.assertRaisesRegexp(FileOperationError, 'Is a directory: ') as e:
self._test_zone('404zone.com', '')
self.assertEqual(e.errno, 1)

with self.assertRaisesRegexp(FileOperationError, 'Permission denied: ') as e:
self._test_zone('404zone.com', '/root/')
self.assertEqual(e.errno, 1)

@live_only()
@ResourceGroupPreparer(name_prefix='test_dns_import_file_operation_error_windows')
def test_dns_import_file_operation_error_windows(self, resource_group):
import sys
if sys.platform != 'win32':
self.skip('This test should run on Windows platform')

from azure.cli.core.azclierror import FileOperationError
with self.assertRaisesRegexp(FileOperationError, 'No such file: ') as e:
self._test_zone('404zone.com', 'non_existing_zone_description_file.txt')
self.assertEqual(e.errno, 1)

# Difference with Linux platform while reading a directory
with self.assertRaisesRegexp(FileOperationError, 'Permission denied:') as e:
self._test_zone('404zone.com', '.')
self.assertEqual(e.errno, 1)

@ResourceGroupPreparer(name_prefix='cli_dns_zone1_import')
def test_dns_zone1_import(self, resource_group):
self._test_zone('zone1.com', 'zone1.txt')
Expand Down
15 changes: 13 additions & 2 deletions src/azure-cli/azure/cli/command_modules/privatedns/custom.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,13 +27,24 @@ def list_privatedns_zones(cmd, resource_group_name=None):
return client.list()


# pylint: disable=too-many-statements, too-many-locals
# pylint: disable=too-many-statements, too-many-locals, too-many-branches
def import_zone(cmd, resource_group_name, private_zone_name, file_name):
from azure.cli.core.util import read_file_content
import sys
from azure.mgmt.privatedns.models import RecordSet

file_text = read_file_content(file_name)
from azure.cli.core.azclierror import FileOperationError, UnknownError
try:
file_text = read_file_content(file_name)
except FileNotFoundError:
raise FileOperationError("No such file: " + str(file_name))
except IsADirectoryError:
raise FileOperationError("Is a directory: " + str(file_name))
except PermissionError:
raise FileOperationError("Permission denied: " + str(file_name))
except OSError as e:
raise UnknownError(e)

zone_obj = parse_zone_file(file_text, private_zone_name)
origin = private_zone_name
record_sets = {}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -955,6 +955,41 @@ def _test_PrivateDnsZone(self, zone_name, filename):
# verify that each record in the original import is unchanged after export/re-import
self._check_records(records1, records2)

@ResourceGroupPreparer(name_prefix='test_Private_Dns_import_file_not_found')
def test_Private_Dns_import_file_operation_error_linux(self, resource_group):
import sys
if sys.platform != 'linux':
self.skip('This test should run on Linux platform')

from azure.cli.core.azclierror import FileOperationError
with self.assertRaisesRegexp(FileOperationError, 'No such file: ') as e:
self._test_PrivateDnsZone('404zone.com', 'non_existing_zone_description_file.txt')
self.assertEqual(e.errno, 1)

with self.assertRaisesRegexp(FileOperationError, 'Is a directory: ') as e:
self._test_PrivateDnsZone('404zone.com', '')
self.assertEqual(e.errno, 1)

with self.assertRaisesRegexp(FileOperationError, 'Permission denied: ') as e:
self._test_PrivateDnsZone('404zone.com', '/root/')
self.assertEqual(e.errno, 1)

@ResourceGroupPreparer(name_prefix='test_dns_import_file_operation_error_windows')
def test_Private_Dns_import_file_operation_error_windows(self, resource_group):
import sys
if sys.platform != 'win32':
self.skip('This test should run on Windows platform')

from azure.cli.core.azclierror import FileOperationError
with self.assertRaisesRegexp(FileOperationError, 'No such file: ') as e:
self._test_PrivateDnsZone('404zone.com', 'non_existing_zone_description_file.txt')
self.assertEqual(e.errno, 1)

# Difference with Linux platform while reading a directory
with self.assertRaisesRegexp(FileOperationError, 'Permission denied:') as e:
self._test_PrivateDnsZone('404zone.com', '.')
self.assertEqual(e.errno, 1)

@ResourceGroupPreparer(name_prefix='cli_private_dns_zone1_import')
def test_Private_Dns_Zone1_Import(self, resource_group):
self._test_PrivateDnsZone('zone1.com', 'zone1.txt')
Expand Down