Completed
Push — master ( d73fd0...3a2f21 )
by
unknown
01:31
created

SymbolsS3Test.setUp()   A

Complexity

Conditions 1

Size

Total Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
c 0
b 0
f 0
dl 0
loc 2
rs 10
1
from django.test import TestCase, override_settings
2
3
import moto
4
import boto
5
import mock
6
7
from crash.factories import CrashFactoryWithFiles, SymbolsFactory
8
from feedback.factories import FeedbackFactory
9
from omaha.factories import VersionFactory
10
from sparkle.factories import SparkleVersionFactory
11
12
from crash.models import Crash, Symbols
13
from feedback.models import Feedback
14
from omaha.models import Version
15
from sparkle.models import SparkleVersion
16
from omaha_server.utils import storage_with_spaces_instance
17
from omaha.limitation import bulk_delete
18
19
20
class BaseS3Test(object):
21
    model = None
22
    factory = None
23
    file_fields = None
24 View Code Duplication
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
25
    @moto.mock_s3
26
    def test_model_delete(self):
27
        conn = boto.connect_s3()
28
        conn.create_bucket('test')
29
        obj = self.factory()
30
31
        keys = conn.get_bucket('test').get_all_keys()
32
        keys = [key.name for key in keys]
33
        for field in self.file_fields:
34
            self.assertIn(getattr(obj, field).name, keys)
35
36
        obj.delete()
37
        keys = conn.get_bucket('test').get_all_keys()
38
        self.assertFalse(keys)
39 View Code Duplication
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
40
    @moto.mock_s3
41
    def test_model_update(self):
42
        conn = boto.connect_s3()
43
        conn.create_bucket('test')
44
        obj = self.factory()
45
        new_obj = self.factory()
46
47
        old_keys = conn.get_bucket('test').get_all_keys()
48
        old_keys = [key.name for key in old_keys]
49
50
        for field in self.file_fields:
51
            self.assertIn(getattr(obj, field).name, old_keys)
52
            setattr(obj, field, getattr(new_obj, field))
53
            obj.save()
54
55
        new_keys = conn.get_bucket('test').get_all_keys()
56
        self.assertFalse(set(old_keys) & set(new_keys))
57
58
    @moto.mock_s3
59
    def test_bulk_delete(self):
60
        conn = boto.connect_s3()
61
        conn.create_bucket('test')
62
        self.factory.create_batch(10)
63
        qs = self.model.objects.all()
64
        self.assertEqual(qs.count(), 10)
65
        keys = conn.get_bucket('test').get_all_keys()
66
        self.assertEqual(len(keys), len(self.file_fields) * 10)
67
        with mock.patch('boto.__init__') as my_mock:
68
            my_mock.connect_s3.return_value = conn
69
            try:                                    # When we try to delete nonexistent key from s3 in pre_delete signal
70
                bulk_delete(self.model, qs)         # original boto doesn't raise S3ResponseError: 404 Not Found
71
            except boto.exception.S3ResponseError:  # but mocked boto does
72
                pass
73
74
        keys = conn.get_bucket('test').get_all_keys()
75
        self.assertFalse(keys)
76
77
78
@override_settings(DEFAULT_FILE_STORAGE='storages.backends.s3boto.S3BotoStorage')
79
class CrashS3Test(BaseS3Test, TestCase):
80
    model = Crash
81
    factory = CrashFactoryWithFiles
82
    file_fields = ['archive', 'upload_file_minidump']
83
84
85
@override_settings(DEFAULT_FILE_STORAGE='storages.backends.s3boto.S3BotoStorage')
86
class FeedbackS3Test(BaseS3Test, TestCase):
87
    model = Feedback
88
    factory = FeedbackFactory
89
    file_fields = ['screenshot', 'blackbox', 'system_logs', 'attached_file']
90
91
@override_settings(DEFAULT_FILE_STORAGE='storages.backends.s3boto.S3BotoStorage')
92
class SymbolsS3Test(BaseS3Test, TestCase):
93
    model = Symbols
94
    factory = SymbolsFactory
95
    file_fields = ['file']
96
97
    def setUp(self):
98
        storage_with_spaces_instance._setup()
99
100
101
102
@override_settings(DEFAULT_FILE_STORAGE='storages.backends.s3boto.S3BotoStorage')
103
class OmahaVersionS3Test(BaseS3Test, TestCase):
104
    model = Version
105
    factory = VersionFactory
106
    file_fields = ['file']
107
108
109
@override_settings(DEFAULT_FILE_STORAGE='storages.backends.s3boto.S3BotoStorage')
110
class SparkleVersionS3Test(BaseS3Test, TestCase):
111
    model = SparkleVersion
112
    factory = SparkleVersionFactory
113
    file_fields = ['file']
114