コード例 #1
0
 def test_update_status_update_already_completed(self):
     c1 = factory.make_RegionRackController()
     ControllerInfo.objects.set_versions_info(
         c1,
         DebVersionsInfo(
             current={"version": "3.0.0-111.aaa"},
             update={"version": "3.0.1-222-g.bbb"},
         ),
     )
     ControllerInfo.objects.set_versions_info(
         c1,
         DebVersionsInfo(current={"version": "3.0.1-222-g.bbb"}, ),
     )
     notification1 = Notification.objects.filter(
         ident=UPGRADE_STATUS_NOTIFICATION_IDENT, ).first()
     # report again, but with no change
     ControllerInfo.objects.set_versions_info(
         c1,
         DebVersionsInfo(current={"version": "3.0.1-222-g.bbb"}, ),
     )
     notification2 = Notification.objects.filter(
         ident=UPGRADE_STATUS_NOTIFICATION_IDENT, ).first()
     self.assertEqual(
         notification2.render(),
         "MAAS has been updated to version 3.0.1.",
     )
     self.assertEqual(
         notification2.context,
         {
             "status": "completed",
             "version": "3.0.1"
         },
     )
     self.assertEqual(notification1.id, notification2.id)
コード例 #2
0
 def test_update_return_earliest_reported(self):
     c1 = factory.make_RackController()
     c2 = factory.make_RackController()
     c3 = factory.make_RackController()
     ControllerInfo.objects.set_versions_info(
         c1,
         DebVersionsInfo(
             current={"version": "2.9.0-001-g.zzz"},
             update={"version": "3.0.0~alpha1-111-g.aaa"},
         ),
     )
     ControllerInfo.objects.set_versions_info(
         c2,
         DebVersionsInfo(
             current={"version": "2.9.0-001-g.zzz"},
             update={"version": "3.0.0-333-g.ccc"},
         ),
     )
     ControllerInfo.objects.set_versions_info(
         c3,
         DebVersionsInfo(
             current={"version": "2.9.0-001-g.zzz"},
             update={"version": "3.0.0-333-g.ccc"},
         ),
     )
     target_version = get_target_version()
     self.assertEqual(
         target_version.version,
         MAASVersion.from_string("3.0.0-333-g.ccc"),
     )
     self.assertEqual(
         target_version.first_reported,
         c2.info.update_first_reported,
     )
コード例 #3
0
 def test_set_versions_update_first_reported_update_same_update_different_install_type(
     self, ):
     controller = factory.make_RackController()
     versions = DebVersionsInfo(
         current={
             "version": "3.0.0~alpha1-111-g.deadbeef",
             "origin": "http://archive.ubuntu.com/ focal/main",
         },
         update={
             "version": "3.0.0~alpha2-222-g.cafecafe",
             "origin": "http://archive.ubuntu.com/ focal/main",
         },
     )
     ControllerInfo.objects.set_versions_info(controller, versions)
     update_first_reported = controller.controllerinfo.update_first_reported
     versions = SnapVersionsInfo(
         current={
             "revision": "1234",
             "version": "3.0.0~alpha1-111-g.deadbeef",
         },
         update={
             "revision": "5678",
             "version": "3.0.0~alpha2-222-g.cafecafe",
         },
     )
     ControllerInfo.objects.set_versions_info(controller, versions)
     controller_info = reload_object(controller).controllerinfo
     self.assertGreater(controller_info.update_first_reported,
                        update_first_reported)
コード例 #4
0
 def test_set_versions_info_deb(self):
     controller = factory.make_RackController()
     versions = DebVersionsInfo(
         current={
             "version": "3.0.0~alpha1-111-g.deadbeef",
             "origin": "http://archive.ubuntu.com/ focal/main",
         },
         update={
             "version": "3.0.0~alpha2-222-g.cafecafe",
             "origin": "http://mymirror.example.com/ focal/main",
         },
     )
     ControllerInfo.objects.set_versions_info(controller, versions)
     controller_info = controller.controllerinfo
     self.assertEqual(controller_info.install_type,
                      CONTROLLER_INSTALL_TYPE.DEB)
     self.assertEqual(controller_info.version,
                      "3.0.0~alpha1-111-g.deadbeef")
     self.assertEqual(controller_info.update_version,
                      "3.0.0~alpha2-222-g.cafecafe")
     # the origin for the update is used
     self.assertEqual(
         controller_info.update_origin,
         "http://mymirror.example.com/ focal/main",
     )
     self.assertEqual(controller_info.snap_revision, "")
     self.assertEqual(controller_info.snap_update_revision, "")
     self.assertEqual(controller_info.snap_cohort, "")
     self.assertIsNotNone(controller_info.update_first_reported)
コード例 #5
0
 def test_dehydrate_with_versions_deb(self):
     owner = factory.make_admin()
     handler = ControllerHandler(owner, {}, None)
     rack = factory.make_RackController()
     versions = DebVersionsInfo(
         current={
             "version": "3.0.0~alpha1-111-g.deadbeef",
             "origin": "http://archive.ubuntu.com main/focal",
         },
         update={
             "version": "3.0.0~alpha2-222-g.cafecafe",
             "origin": "http://archive.ubuntu.com main/focal",
         },
     )
     ControllerInfo.objects.set_versions_info(rack, versions)
     result = handler.list({})
     self.assertEqual(
         result[0]["versions"],
         {
             "install_type": "deb",
             "current": {
                 "version": "3.0.0~alpha1-111-g.deadbeef",
             },
             "update": {
                 "version": "3.0.0~alpha2-222-g.cafecafe",
             },
             "origin": "http://archive.ubuntu.com main/focal",
             "up_to_date": False,
             "issues": [],
         },
     )
コード例 #6
0
 def test_snap_channel_ignores_deb(self):
     c1 = factory.make_RackController()
     c2 = factory.make_RackController()
     ControllerInfo.objects.set_versions_info(
         c1,
         SnapVersionsInfo(
             current={
                 "version": "3.0.0-111-g.aaa",
                 "revision": "1234"
             },
             channel={
                 "track": "3.0",
                 "risk": "stable"
             },
         ),
     )
     ControllerInfo.objects.set_versions_info(
         c2,
         DebVersionsInfo(
             current={
                 "version": "3.0.0~beta1-001-g.bbb",
                 "origin": "http://archive.ubuntu.com/ focal/main",
             },
             update={
                 "version": "3.0.0-111-g.aaa",
                 "origin": "http://archive.ubuntu.com/ focal/main",
             },
         ),
     )
     target_version = get_target_version()
     self.assertEqual(
         target_version.snap_channel,
         SnapChannel("3.0", "stable"),
     )
コード例 #7
0
 def test_different_versions(self):
     c1 = factory.make_RegionRackController()
     c2 = factory.make_RegionRackController()
     ControllerInfo.objects.set_versions_info(
         c1,
         DebVersionsInfo(current={"version": "3.0.0-111-g.aaa"}, ),
     )
     ControllerInfo.objects.set_versions_info(
         c2,
         DebVersionsInfo(current={"version": "3.0.1-222-g.bbb"}, ),
     )
     notification = Notification.objects.filter(
         ident=UPGRADE_ISSUE_NOTIFICATION_IDENT).first()
     self.assertIn(
         "Controllers have different versions.",
         notification.message,
     )
コード例 #8
0
 def test_update_older_than_installed(self):
     c1 = factory.make_RackController()
     c2 = factory.make_RackController()
     ControllerInfo.objects.set_versions_info(
         c1,
         DebVersionsInfo(current={"version": "3.0.0-111-g.aaa"}, ),
     )
     ControllerInfo.objects.set_versions_info(
         c2,
         DebVersionsInfo(
             current={"version": "2.9.0-001-g.zzz"},
             update={"version": "2.9.1-010-g.bbb"},
         ),
     )
     target_version = get_target_version()
     self.assertEqual(target_version.version,
                      MAASVersion.from_string("3.0.0-111-g.aaa"))
コード例 #9
0
 def test_same_upgrade(self):
     c1 = factory.make_RegionRackController()
     c2 = factory.make_RegionRackController()
     ControllerInfo.objects.set_versions_info(
         c1,
         DebVersionsInfo(
             current={"version": "3.0.0-111-g.aaa"},
             update={"version": "3.0.1-222-g.bbb"},
         ),
     )
     ControllerInfo.objects.set_versions_info(
         c2,
         DebVersionsInfo(
             current={"version": "3.0.0-111-g.aaa"},
             update={"version": "3.0.1-222-g.bbb"},
         ),
     )
     self.assertFalse(
         Notification.objects.filter(
             ident=UPGRADE_ISSUE_NOTIFICATION_IDENT).exists())
コード例 #10
0
 def test_snap_channel_from_version(self):
     c1 = factory.make_RackController()
     ControllerInfo.objects.set_versions_info(
         c1,
         DebVersionsInfo(current={"version": "3.0.0~rc1-111-g.aaa"}, ),
     )
     target_version = get_target_version()
     self.assertEqual(
         target_version.snap_channel,
         SnapChannel("3.0", "candidate"),
     )
コード例 #11
0
 def test_return_highest_version(self):
     c1 = factory.make_RackController()
     c2 = factory.make_RackController()
     c3 = factory.make_RackController()
     ControllerInfo.objects.set_versions_info(
         c1,
         DebVersionsInfo(current={"version": "3.0.0~alpha1-111-g.aaa"}),
     )
     ControllerInfo.objects.set_versions_info(
         c2,
         DebVersionsInfo(current={"version": "3.0.0~beta1-222-g.bbb"}),
     )
     ControllerInfo.objects.set_versions_info(
         c3,
         DebVersionsInfo(current={"version": "3.0.0-333-g.ccc"}),
     )
     target_version = get_target_version()
     self.assertEqual(
         target_version.version,
         MAASVersion.from_string("3.0.0-333-g.ccc"),
     )
コード例 #12
0
 def test_set_versions_info_deb_ppa(self):
     controller = factory.make_RackController()
     versions = DebVersionsInfo(current={
         "version":
         "3.0.0~alpha1-111-g.deadbeef",
         "origin":
         "http://ppa.launchpad.net/maas/3.0/ubuntu/ focal/main",
     }, )
     ControllerInfo.objects.set_versions_info(controller, versions)
     self.assertEqual(
         controller.controllerinfo.update_origin,
         "ppa:maas/3.0",
     )
コード例 #13
0
ファイル: test_deb.py プロジェクト: casual-lemon/maas
 def test_region_installed(self):
     apt_pkg = MockAptPkg()
     current = apt_pkg._make_package_version("3.0.0~alpha1-111-g.deadbeef")
     apt_pkg._add_package("maas-region-api", current=current)
     self.assertEqual(
         get_deb_versions_info(apt_pkg=apt_pkg),
         DebVersionsInfo(
             current=DebVersion(
                 version="3.0.0~alpha1-111-g.deadbeef", origin=""
             ),
             update=None,
         ),
     )
コード例 #14
0
 def test_update_status_new_update_already_completed(self):
     c1 = factory.make_RegionRackController()
     ControllerInfo.objects.set_versions_info(
         c1,
         DebVersionsInfo(
             current={"version": "3.0.0-111.aaa"},
             update={"version": "3.0.1-222-g.bbb"},
         ),
     )
     ControllerInfo.objects.set_versions_info(
         c1,
         DebVersionsInfo(current={"version": "3.0.1-222-g.bbb"}, ),
     )
     notification1 = Notification.objects.filter(
         ident=UPGRADE_STATUS_NOTIFICATION_IDENT, ).first()
     # a new update is available
     ControllerInfo.objects.set_versions_info(
         c1,
         DebVersionsInfo(
             current={"version": "3.0.1-222-g.bbb"},
             update={"version": "3.0.2-333-g.ccc"},
         ),
     )
     notification2 = Notification.objects.filter(
         ident=UPGRADE_STATUS_NOTIFICATION_IDENT, ).first()
     self.assertEqual(
         notification2.render(),
         "MAAS 3.0.2 is available, controllers will upgrade soon.",
     )
     self.assertEqual(
         notification2.context,
         {
             "status": "inprogress",
             "version": "3.0.2"
         },
     )
     self.assertNotEqual(notification1.id, notification2.id)
コード例 #15
0
 def test_update_status_update_same_version(self):
     c1 = factory.make_RegionRackController()
     ControllerInfo.objects.set_versions_info(
         c1,
         DebVersionsInfo(
             current={"version": "3.0.0-111.aaa"},
             update={"version": "3.0.1-222-g.bbb"},
         ),
     )
     notification1 = Notification.objects.filter(
         ident=UPGRADE_STATUS_NOTIFICATION_IDENT, ).first()
     self.assertEqual(
         notification1.render(),
         "MAAS 3.0.1 is available, controllers will upgrade soon.",
     )
     # report again, same version
     ControllerInfo.objects.set_versions_info(
         c1,
         DebVersionsInfo(
             current={"version": "3.0.0-111.aaa"},
             update={"version": "3.0.1-222-g.bbb"},
         ),
     )
     notification2 = Notification.objects.filter(
         ident=UPGRADE_STATUS_NOTIFICATION_IDENT, ).first()
     self.assertEqual(
         notification2.render(),
         "MAAS 3.0.1 is available, controllers will upgrade soon.",
     )
     self.assertEqual(
         notification2.context,
         {
             "status": "inprogress",
             "version": "3.0.1"
         },
     )
     self.assertEqual(notification1.id, notification2.id)
コード例 #16
0
 def test_set_versions_info_deb_no_update(self):
     controller = factory.make_RackController()
     versions = DebVersionsInfo(current={
         "version":
         "3.0.0~alpha1-111-g.deadbeef",
         "origin":
         "http://archive.ubuntu.com/ focal/main",
     }, )
     ControllerInfo.objects.set_versions_info(controller, versions)
     controller_info = controller.controllerinfo
     self.assertEqual(controller_info.update_version, "")
     self.assertEqual(
         controller_info.update_origin,
         "http://archive.ubuntu.com/ focal/main",
     )
     self.assertIsNone(controller_info.update_first_reported)
コード例 #17
0
ファイル: test_deb.py プロジェクト: casual-lemon/maas
 def test_deserialize(self):
     info = DebVersionsInfo(
         current={
             "version": "3.0.0~alpha1-111-g.deadbeef",
         },
         update={
             "version": "3.0.0~alpha2-222-g.cafecafe",
         },
     )
     self.assertEqual(
         info.current,
         DebVersion(version="3.0.0~alpha1-111-g.deadbeef"),
     )
     self.assertEqual(
         info.update,
         DebVersion(version="3.0.0~alpha2-222-g.cafecafe"),
     )
コード例 #18
0
 def test_different_install_types(self):
     c1 = factory.make_RegionRackController()
     c2 = factory.make_RegionRackController()
     ControllerInfo.objects.set_versions_info(
         c1,
         DebVersionsInfo(current={"version": "3.0.0-111-g.aaa"}, ),
     )
     ControllerInfo.objects.set_versions_info(
         c2,
         SnapVersionsInfo(current={
             "version": "3.0.0-111-g.aaa",
             "revision": "1234"
         }, ),
     )
     notification = Notification.objects.filter(
         ident=UPGRADE_ISSUE_NOTIFICATION_IDENT).first()
     self.assertIn(
         "Controllers have different installation sources.",
         notification.message,
     )
コード例 #19
0
ファイル: test_deb.py プロジェクト: casual-lemon/maas
 def test_origin(self):
     apt_pkg = MockAptPkg()
     current = apt_pkg._make_package_version(
         "3.0.0~alpha1-111-g.deadbeef",
         origins=(
             (500, "http://archive.ubuntu.com", "focal", "main"),
             (900, "http://mirror.example.com", "focal", "other"),
         ),
     )
     apt_pkg._add_package("maas-region-api", current=current)
     self.assertEqual(
         get_deb_versions_info(apt_pkg=apt_pkg),
         DebVersionsInfo(
             current=DebVersion(
                 version="3.0.0~alpha1-111-g.deadbeef",
                 origin="http://mirror.example.com focal/other",
             ),
             update=None,
         ),
     )
コード例 #20
0
 def test_set_versions_info_change_type(self):
     controller = factory.make_RackController()
     deb_versions = DebVersionsInfo(
         current={
             "version": "3.0.0",
             "origin": "http://archive.ubuntu.com/ focal/main",
         },
         update={
             "version": "3.0.1",
             "origin": "http://mymirror.example.com/ focal/main",
         },
     )
     snap_versions = SnapVersionsInfo(
         current={
             "revision": "1234",
             "version": "3.1.0",
         },
         channel={
             "track": "3.0",
             "risk": "stable"
         },
         update={
             "revision": "5678",
             "version": "3.1.1",
         },
         cohort="abc123",
     )
     ControllerInfo.objects.set_versions_info(controller, deb_versions)
     ControllerInfo.objects.set_versions_info(controller, snap_versions)
     controller_info = reload_object(controller).controllerinfo
     # all fields are updated
     self.assertEqual(controller_info.install_type,
                      CONTROLLER_INSTALL_TYPE.SNAP)
     self.assertEqual(controller_info.version, "3.1.0")
     self.assertEqual(controller_info.update_version, "3.1.1")
     self.assertEqual(controller_info.update_origin, "3.0/stable")
     self.assertEqual(controller_info.snap_revision, "1234")
     self.assertEqual(controller_info.snap_update_revision, "5678")
     self.assertEqual(controller_info.snap_cohort, "abc123")