Correctly handle agent family without package URIs

Signed-off-by: Brendan Dixon <brendand@microsoft.com>
This commit is contained in:
Brendan Dixon
2016-10-25 10:43:00 -07:00
parent 04f3497da1
commit 84d4532558
3 changed files with 56 additions and 10 deletions
+2 -1
View File
@@ -345,7 +345,8 @@ class UpdateHandler(object):
message=msg)
return False
manifests = [m for m in manifest_list.vmAgentManifests if m.family == family]
manifests = [m for m in manifest_list.vmAgentManifests \
if m.family == family and len(m.versionsManifestUris) > 0]
if len(manifests) == 0:
logger.info(u"Incarnation {0} has no agent family {1} updates", etag, family)
return False
@@ -0,0 +1,33 @@
<?xml version="1.0" encoding="utf-8"?>
<Extensions version="1.0.0.0" goalStateIncarnation="1">
<GuestAgentExtension
xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<GAFamilies>
<GAFamily>
<Name>Prod</Name>
<Uris />
</GAFamily>
<GAFamily>
<Name>Test</Name>
<Uris>
<Uri>https://rdfepirv2bl2prdstr01.blob.core.windows.net/7d89d439b79f4452950452399add2c90/Microsoft.OSTCLinuxAgent_Test_useast_manifest.xml</Uri>
<Uri>https://rdfepirv2bl2prdstr02.blob.core.windows.net/7d89d439b79f4452950452399add2c90/Microsoft.OSTCLinuxAgent_Test_useast_manifest.xml</Uri>
<Uri>https://rdfepirv2bl2prdstr03.blob.core.windows.net/7d89d439b79f4452950452399add2c90/Microsoft.OSTCLinuxAgent_Test_useast_manifest.xml</Uri>
<Uri>https://rdfepirv2bl2prdstr04.blob.core.windows.net/7d89d439b79f4452950452399add2c90/Microsoft.OSTCLinuxAgent_Test_useast_manifest.xml</Uri>
<Uri>https://rdfepirv2bl3prdstr01.blob.core.windows.net/7d89d439b79f4452950452399add2c90/Microsoft.OSTCLinuxAgent_Test_useast_manifest.xml</Uri>
<Uri>https://rdfepirv2bl3prdstr02.blob.core.windows.net/7d89d439b79f4452950452399add2c90/Microsoft.OSTCLinuxAgent_Test_useast_manifest.xml</Uri>
<Uri>https://rdfepirv2bl3prdstr03.blob.core.windows.net/7d89d439b79f4452950452399add2c90/Microsoft.OSTCLinuxAgent_Test_useast_manifest.xml</Uri>
<Uri>https://zrdfepirv2bl4prdstr01.blob.core.windows.net/7d89d439b79f4452950452399add2c90/Microsoft.OSTCLinuxAgent_Test_useast_manifest.xml</Uri>
<Uri>https://zrdfepirv2bl4prdstr03.blob.core.windows.net/7d89d439b79f4452950452399add2c90/Microsoft.OSTCLinuxAgent_Test_useast_manifest.xml</Uri>
<Uri>https://zrdfepirv2bl5prdstr02.blob.core.windows.net/7d89d439b79f4452950452399add2c90/Microsoft.OSTCLinuxAgent_Test_useast_manifest.xml</Uri>
<Uri>https://zrdfepirv2bl5prdstr04.blob.core.windows.net/7d89d439b79f4452950452399add2c90/Microsoft.OSTCLinuxAgent_Test_useast_manifest.xml</Uri>
<Uri>https://zrdfepirv2bl5prdstr06.blob.core.windows.net/7d89d439b79f4452950452399add2c90/Microsoft.OSTCLinuxAgent_Test_useast_manifest.xml</Uri>
<Uri>https://zrdfepirv2bl5prdstr09a.blob.core.windows.net/7d89d439b79f4452950452399add2c90/Microsoft.OSTCLinuxAgent_Test_useast_manifest.xml</Uri>
<Uri>https://zrdfepirv2bl6prdstr02a.blob.core.windows.net/7d89d439b79f4452950452399add2c90/Microsoft.OSTCLinuxAgent_Test_useast_manifest.xml</Uri>
</Uris>
</GAFamily>
</GAFamilies>
<Location>eastus</Location>
</GuestAgentExtension>
<StatusUploadBlob statusBlobType="BlockBlob">https://walaautoasmeastus.blob.core.windows.net/vhds/walaautos73small.walaautos73small.walaautos73small.status?sr=b&amp;sp=rw&amp;se=9999-01-01&amp;sk=key1&amp;sv=2014-02-14&amp;sig=u%2BCA2Cxb7ticiEBRIW8HWgNW7gl2NPuOGQl0u95ApQE%3D</StatusUploadBlob>
</Extensions>
+21 -9
View File
@@ -672,11 +672,11 @@ class TestUpdate(UpdateTestCase):
return self.update_handler._upgrade_available(base_version=base_version)
def test_ensure_latest_agent_returns_true_on_first_use(self):
def test_upgrade_available_returns_true_on_first_use(self):
self.assertTrue(self._test_upgrade_available())
return
def test_ensure_current_agent_excluded(self):
def test_get_latest_agent_excluded(self):
self.prepare_agent(AGENT_VERSION)
self.assertFalse(self._test_upgrade_available(
versions=self.agent_versions(),
@@ -684,7 +684,19 @@ class TestUpdate(UpdateTestCase):
self.assertEqual(None, self.update_handler.get_latest_agent())
return
def test_ensure_latest_agent_includes_old_agents(self):
def test_upgrade_available_handles_missing_family(self):
extensions_config = ExtensionsConfig(load_data("wire/ext_conf_missing_family.xml"))
protocol = ProtocolMock()
protocol.family = "Prod"
protocol.agent_manifests = extensions_config.vmagent_manifests
self.update_handler.protocol_util = protocol
with patch('azurelinuxagent.common.logger.warn') as mock_logger:
with patch('tests.ga.test_update.ProtocolMock.get_vmagent_pkgs', side_effect=ProtocolError):
self.assertFalse(self.update_handler._upgrade_available(base_version=CURRENT_VERSION))
self.assertEqual(0, mock_logger.call_count)
return
def test_upgrade_available_includes_old_agents(self):
self.prepare_agents()
old_version = self.agent_versions()[-1]
@@ -697,7 +709,7 @@ class TestUpdate(UpdateTestCase):
self.assertEqual(all_count, len(self.update_handler.agents))
return
def test_ensure_lastest_agent_purges_old_agents(self):
def test_upgrade_available_purges_old_agents(self):
self.prepare_agents()
agent_count = self.agent_count()
self.assertEqual(5, agent_count)
@@ -708,28 +720,28 @@ class TestUpdate(UpdateTestCase):
self.assertEqual(agent_versions, self.agent_versions())
return
def test_ensure_latest_agent_skips_if_too_frequent(self):
def test_upgrade_available_skips_if_too_frequent(self):
conf.get_autoupdate_frequency = Mock(return_value=10000)
self.update_handler.last_attempt_time = time.time()
self.assertFalse(self._test_upgrade_available())
return
def test_ensure_latest_agent_skips_if_when_no_new_versions(self):
def test_upgrade_available_skips_if_when_no_new_versions(self):
self.prepare_agents()
base_version = self.agent_versions()[0] + 1
self.assertFalse(self._test_upgrade_available(base_version=base_version))
return
def test_ensure_latest_agent_skips_when_no_versions(self):
def test_upgrade_available_skips_when_no_versions(self):
self.assertFalse(self._test_upgrade_available(protocol=ProtocolMock()))
return
def test_ensure_latest_agent_skips_when_updates_are_disabled(self):
def test_upgrade_available_skips_when_updates_are_disabled(self):
conf.get_autoupdate_enabled = Mock(return_value=False)
self.assertFalse(self._test_upgrade_available())
return
def test_ensure_latest_agent_sorts(self):
def test_upgrade_available_sorts(self):
self.prepare_agents()
self._test_upgrade_available()