def testSnapshotUrlPropertySetNonlocalMultipleUrls(self):
     properties.VALUES.component_manager.snapshot_url.Set(
         'https://repo1.repo,https://repo2.repo')
     self.assertEqual(
         self._BASE_DEFAULT_URLS +
         ['https://repo1.repo', 'https://repo2.repo'],
         network_diagnostics.DefaultUrls())
class NetworkDiagnosticTests(diagnostics_test_base.DiagnosticTestBase):

  _FAIL_RESULT = CheckFailResult(network_diagnostics.DefaultUrls())

  def SetUp(self):
    self.run_check_mock = self.StartObjectPatch(
        network_diagnostics.ReachabilityChecker, 'Check')
    self.fixer_mock = self.StartObjectPatch(http_proxy_setup,
                                            'ChangeGcloudProxySettings')

  def testNoNetworkIssues(self):
    self.run_check_mock.return_value = check_base.Result(passed=True), None
    self.assertTrue(network_diagnostics.NetworkDiagnostic().RunChecks())
    self.assertEqual(1, self.run_check_mock.call_count)
    self.assertFalse(self.fixer_mock.called)
    self.AssertErrContains(
        'Network diagnostic passed (1/1 checks passed).')

  def testNetworkIssuesNoProxyChangesMade(self):
    self.run_check_mock.return_value = self._FAIL_RESULT, self.fixer_mock
    self.fixer_mock.return_value = False
    self.assertFalse(network_diagnostics.NetworkDiagnostic().RunChecks())
    self.assertEqual(1, self.run_check_mock.call_count)
    self.assertEqual(1, self.fixer_mock.call_count)
    self.AssertErrContains(
        'ERROR: Network diagnostic failed (0/1 checks passed).')

  def testNetworkIssuesProxyChangesMadeStillIssuesExit(self):
    self.run_check_mock.return_value = self._FAIL_RESULT, self.fixer_mock
    self.fixer_mock.side_effect = [True, False]
    self.assertFalse(network_diagnostics.NetworkDiagnostic().RunChecks())
    self.assertEqual(2, self.run_check_mock.call_count)
    self.assertEqual(2, self.fixer_mock.call_count)
    self.AssertErrContains(
        'ERROR: Network diagnostic failed (0/1 checks passed).')

  def testNetworkIssuesProxyChangesMadeIssuesFixed(self):
    self.run_check_mock.side_effect = [
        (self._FAIL_RESULT, self.fixer_mock),
        (check_base.Result(passed=True), None)]
    self.fixer_mock.return_value = True
    self.assertTrue(network_diagnostics.NetworkDiagnostic().RunChecks())
    self.assertEqual(2, self.run_check_mock.call_count)
    self.assertEqual(1, self.fixer_mock.call_count)
    self.AssertErrContains(
        'Network diagnostic passed (1/1 checks passed).')

  def testNetworkIssuesMaxFixRetriesMet(self):
    self.run_check_mock.return_value = (self._FAIL_RESULT, self.fixer_mock)
    self.fixer_mock.return_value = True
    self.assertFalse(network_diagnostics.NetworkDiagnostic().RunChecks())
    max_retries = network_diagnostics.NetworkDiagnostic._MAX_RETRIES
    self.assertEqual(max_retries + 1, self.run_check_mock.call_count)
    self.assertEqual(max_retries, self.fixer_mock.call_count)
    self.AssertErrContains('Unable to fix Network diagnostic failure after 5 '
                           'attempts.')
    self.AssertErrContains(
        'ERROR: Network diagnostic failed (0/1 checks passed).')
 def testSnapshotUrlPropertySetLocalFileMultipleFiles(self):
   properties.VALUES.component_manager.snapshot_url.Set(
       'file://repo1,file://repo2')
   self.assertEqual(self._BASE_DEFAULT_URLS,
                    network_diagnostics.DefaultUrls())
 def testNoSnapshotUrls(self):
   self.assertEqual(self._BASE_DEFAULT_URLS,
                    network_diagnostics.DefaultUrls())