72
72
MAASTransactionServerTestCase,
74
74
from maasserver.utils import absolute_reverse
75
from maasserver.utils.orm import get_one
75
from maasserver.utils.orm import (
76
79
from maastesting.djangotestcase import DjangoTransactionTestCase
77
80
from maastesting.matchers import (
78
81
MockCalledOnceWith,
725
728
def test_get_or_create_boot_resource_set_creates_resource_set(self):
726
729
name, architecture, product = make_product()
727
730
product, resource = make_boot_resource_group_from_product(product)
728
resource.sets.all().delete()
731
with post_commit_hooks:
732
resource.sets.all().delete()
729
733
store = BootResourceStore()
730
734
resource_set = store.get_or_create_boot_resource_set(resource, product)
731
735
self.assertEqual(product['version_name'], resource_set.version)
744
748
name, architecture, product = make_product()
745
749
product, resource = make_boot_resource_group_from_product(product)
746
750
resource_set = resource.sets.first()
747
resource_set.files.all().delete()
751
with post_commit_hooks:
752
resource_set.files.all().delete()
748
753
store = BootResourceStore()
749
754
rfile = store.get_or_create_boot_resource_file(resource_set, product)
750
755
self.assertEqual(product['ftype'], rfile.filename)
804
809
rfile, _, _ = make_boot_resource_file_with_stream()
805
810
reader = StringIO(factory.make_string())
806
811
store = BootResourceStore()
807
store.write_content(rfile, reader)
812
with post_commit_hooks:
813
store.write_content(rfile, reader)
808
814
self.assertFalse(BootResourceFile.objects.filter(id=rfile.id).exists())
810
816
def test_finalize_does_nothing_if_resources_to_delete_hasnt_changed(self):
867
873
with transaction.atomic():
868
874
product, resource = make_boot_resource_group_from_product(product)
869
875
resource_set = resource.sets.first()
870
resource_set.files.all().delete()
876
with post_commit_hooks:
877
resource_set.files.all().delete()
871
878
largefile = factory.make_LargeFile()
872
879
product['sha256'] = largefile.sha256
873
880
product['size'] = largefile.total_size
1258
1265
"""Tests for `_import_resources_in_thread`."""
1260
1267
def test__defers__import_resources_to_thread(self):
1261
deferToThread = self.patch(bootresources, "deferToThread")
1268
deferToDatabase = self.patch(bootresources, "deferToDatabase")
1262
1269
bootresources._import_resources_in_thread(force=sentinel.force)
1263
1270
self.assertThat(
1264
deferToThread, MockCalledOnceWith(
1271
deferToDatabase, MockCalledOnceWith(
1265
1272
bootresources._import_resources, force=sentinel.force))
1267
1274
def tests__defaults_force_to_False(self):
1268
deferToThread = self.patch(bootresources, "deferToThread")
1275
deferToDatabase = self.patch(bootresources, "deferToDatabase")
1269
1276
bootresources._import_resources_in_thread()
1270
1277
self.assertThat(
1271
deferToThread, MockCalledOnceWith(
1278
deferToDatabase, MockCalledOnceWith(
1272
1279
bootresources._import_resources, force=False))
1274
1281
def test__logs_errors_and_does_not_errback(self):
1275
1282
logger = self.useFixture(TwistedLoggerFixture())
1276
1283
exception_type = factory.make_exception_type()
1277
deferToThread = self.patch(bootresources, "deferToThread")
1278
deferToThread.return_value = fail(exception_type())
1284
deferToDatabase = self.patch(bootresources, "deferToDatabase")
1285
deferToDatabase.return_value = fail(exception_type())
1279
1286
d = bootresources._import_resources_in_thread(force=sentinel.force)
1280
1287
self.assertIsNone(extract_result(d))
1281
1288
self.assertDocTestMatches(
1291
1298
exception = CalledProcessError(
1292
1299
2, [factory.make_name("command")],
1293
1300
factory.make_name("output"))
1294
deferToThread = self.patch(bootresources, "deferToThread")
1295
deferToThread.return_value = fail(exception)
1301
deferToDatabase = self.patch(bootresources, "deferToDatabase")
1302
deferToDatabase.return_value = fail(exception)
1296
1303
d = bootresources._import_resources_in_thread(force=sentinel.force)
1297
1304
self.assertIsNone(extract_result(d))
1298
1305
self.assertDocTestMatches(
1326
1333
def test_maybe_import_resources_does_not_error(self):
1327
1334
service = bootresources.ImportResourcesService()
1328
deferToThread = self.patch(bootresources, "deferToThread")
1335
deferToDatabase = self.patch(bootresources, "deferToDatabase")
1329
1336
exception_type = factory.make_exception_type()
1330
deferToThread.return_value = fail(exception_type())
1337
deferToDatabase.return_value = fail(exception_type())
1331
1338
d = service.maybe_import_resources()
1332
1339
self.assertIsNone(extract_result(d))