~sergiusens/snapcraft/meta-all-yaml

« back to all changes in this revision

Viewing changes to snapcraft/tests/test_meta.py

  • Committer: Sergio Schvezov
  • Date: 2015-08-25 17:52:03 UTC
  • Revision ID: sergio.schvezov@canonical.com-20150825175203-tcw8dm4bl8829uj3
Unit tests

Show diffs side-by-side

added added

removed removed

Lines of Context:
15
15
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
16
16
 
17
17
import os
 
18
from unittest.mock import (
 
19
    Mock,
 
20
    call,
 
21
    mock_open,
 
22
    patch,
 
23
)
18
24
 
19
25
from snapcraft import (
20
26
    common,
23
29
)
24
30
 
25
31
 
 
32
class Compose(tests.TestCase):
 
33
 
 
34
    def setUp(self):
 
35
        self.orig_wrap_exe = meta._wrap_exe
 
36
        meta._wrap_exe = Mock(return_value='binary.wrapped')
 
37
 
 
38
        self.config_data = {
 
39
            'name': 'my-package',
 
40
            'version': '1.0',
 
41
            'vendor': 'Sergio Schvezov <sergio.schvezov@canonical.com>',
 
42
        }
 
43
 
 
44
    def tearDown(self):
 
45
        meta._wrap_exe = self.orig_wrap_exe
 
46
 
 
47
    def test_plain_no_binaries_or_services(self):
 
48
 
 
49
        y = meta.compose_package_yaml(self.config_data, ['armhf', 'amd64'])
 
50
 
 
51
        self.assertEqual(y['name'], 'my-package')
 
52
        self.assertEqual(y['version'], '1.0')
 
53
        self.assertEqual(y['vendor'], 'Sergio Schvezov <sergio.schvezov@canonical.com>')
 
54
        self.assertFalse('architecture' in y)
 
55
        self.assertTrue('amd64' in y['architectures'])
 
56
        self.assertTrue('armhf' in y['architectures'])
 
57
        self.assertEqual(len(y['architectures']), 2)
 
58
        self.assertFalse('binaries' in y)
 
59
        self.assertFalse('services' in y)
 
60
 
 
61
    def test_plain_no_binaries_or_services_or_arches(self):
 
62
 
 
63
        y = meta.compose_package_yaml(self.config_data, None)
 
64
 
 
65
        self.assertEqual(y['name'], 'my-package')
 
66
        self.assertEqual(y['version'], '1.0')
 
67
        self.assertEqual(y['vendor'], 'Sergio Schvezov <sergio.schvezov@canonical.com>')
 
68
        self.assertFalse('architectures' in y)
 
69
        self.assertFalse('architecture' in y)
 
70
        self.assertFalse('binaries' in y)
 
71
        self.assertFalse('services' in y)
 
72
 
 
73
    def test_with_binaries(self):
 
74
        self.config_data['binaries'] = [
 
75
            {
 
76
                'name': 'binary1',
 
77
                'exec': 'binary1.sh go',
 
78
            },
 
79
            {
 
80
                'name': 'binary2',
 
81
            },
 
82
        ]
 
83
 
 
84
        y = meta.compose_package_yaml(self.config_data, ['armhf', 'amd64'])
 
85
 
 
86
        self.assertEqual(y['name'], 'my-package')
 
87
        self.assertEqual(y['version'], '1.0')
 
88
        self.assertEqual(y['vendor'], 'Sergio Schvezov <sergio.schvezov@canonical.com>')
 
89
        self.assertTrue('amd64' in y['architectures'])
 
90
        self.assertTrue('armhf' in y['architectures'])
 
91
        self.assertEqual(len(y['architectures']), 2)
 
92
        self.assertFalse('services' in y)
 
93
        self.assertEquals(len(y['binaries']), 2)
 
94
        self.assertEqual(y['binaries'][0]['name'], 'binary1')
 
95
        self.assertEqual(y['binaries'][0]['exec'], 'binary.wrapped go')
 
96
        self.assertEqual(y['binaries'][1]['name'], 'binary2')
 
97
        self.assertEqual(y['binaries'][1]['exec'], 'binary.wrapped')
 
98
 
 
99
    def test_with_services(self):
 
100
        self.config_data['services'] = [
 
101
            {
 
102
                'name': 'service1',
 
103
                'start': 'binary1',
 
104
            },
 
105
            {
 
106
                'name': 'service2',
 
107
                'start': 'binary2 --start',
 
108
                'stop': 'binary2 --stop',
 
109
            },
 
110
            {
 
111
                'name': 'service3',
 
112
            },
 
113
        ]
 
114
 
 
115
        y = meta.compose_package_yaml(self.config_data, ['armhf', 'amd64'])
 
116
 
 
117
        self.assertEqual(y['name'], 'my-package')
 
118
        self.assertEqual(y['version'], '1.0')
 
119
        self.assertEqual(y['vendor'], 'Sergio Schvezov <sergio.schvezov@canonical.com>')
 
120
        self.assertTrue('amd64' in y['architectures'])
 
121
        self.assertTrue('armhf' in y['architectures'])
 
122
        self.assertEqual(len(y['architectures']), 2)
 
123
        self.assertFalse('binaries' in y)
 
124
        self.assertEqual(len(y['services']), 3)
 
125
        self.assertEqual(y['services'][0]['name'], 'service1')
 
126
        self.assertEqual(y['services'][0]['start'], 'binary.wrapped')
 
127
        self.assertFalse('stop' in y['services'][0])
 
128
        self.assertEqual(y['services'][1]['name'], 'service2')
 
129
        self.assertEqual(y['services'][1]['start'], 'binary.wrapped --start')
 
130
        self.assertEqual(y['services'][1]['stop'], 'binary.wrapped --stop')
 
131
        self.assertEqual(y['services'][2]['name'], 'service3')
 
132
        self.assertFalse('stop' in y['services'][2])
 
133
        self.assertFalse('stop' in y['services'][2])
 
134
 
 
135
    def test_compose_readme(self):
 
136
        self.config_data['summary'] = 'one line summary'
 
137
        self.config_data['description'] = 'the description\nwhich can be longer'
 
138
 
 
139
        readme_text = '''one line summary
 
140
the description
 
141
which can be longer
 
142
'''
 
143
 
 
144
        self.assertEqual(meta.compose_readme(self.config_data), readme_text)
 
145
 
 
146
 
 
147
class Create(tests.TestCase):
 
148
 
 
149
    def setUp(self):
 
150
        self.orig_os_makedirs = os.makedirs
 
151
 
 
152
        self.config_data = {
 
153
            'name': 'my-package',
 
154
            'version': '1.0',
 
155
            'vendor': 'Sergio Schvezov <sergio.schvezov@canonical.com>',
 
156
            'description': 'my description',
 
157
            'summary': 'my summary',
 
158
        }
 
159
 
 
160
    def tearDown(self):
 
161
        os.makedirs = self.orig_os_makedirs
 
162
 
 
163
    def test_create_meta(self):
 
164
        os.makedirs = Mock()
 
165
        mock_the_open = mock_open()
 
166
 
 
167
        with patch('snapcraft.meta.open', mock_the_open, create=True):
 
168
            meta.create(self.config_data, ['amd64'])
 
169
 
 
170
        meta_dir = os.path.join(os.path.abspath(os.curdir), 'snap', 'meta')
 
171
 
 
172
        mock_the_open.assert_has_calls([
 
173
            call(os.path.join(meta_dir, 'package.yaml'), 'w'),
 
174
            call().__enter__(),
 
175
            call().write('architectures'),
 
176
            call().write(':'),
 
177
            call().write('\n'),
 
178
            call().write('-'),
 
179
            call().write(' '),
 
180
            call().write('amd64'),
 
181
            call().write('\n'),
 
182
            call().write('name'),
 
183
            call().write(':'),
 
184
            call().write(' '),
 
185
            call().write('my-package'),
 
186
            call().write('\n'),
 
187
            call().write('vendor'),
 
188
            call().write(':'),
 
189
            call().write(' '),
 
190
            call().write('Sergio'),
 
191
            call().write(' '),
 
192
            call().write('Schvezov'),
 
193
            call().write(' '),
 
194
            call().write('<sergio.schvezov@canonical.com>'),
 
195
            call().write('\n'),
 
196
            call().write('version'),
 
197
            call().write(':'),
 
198
            call().write(" '"),
 
199
            call().write('1.0'),
 
200
            call().write("'"),
 
201
            call().write('\n'),
 
202
            call().flush(),
 
203
            call().flush(),
 
204
            call().__exit__(None, None, None),
 
205
            call(os.path.join(meta_dir, 'readme.md'), 'w'),
 
206
            call().__enter__(),
 
207
            call().write('my summary\nmy description\n'),
 
208
            call().__exit__(None, None, None),
 
209
        ]
 
210
        )
 
211
 
 
212
 
26
213
class WrapExeTestCase(tests.TestCase):
27
214
 
28
215
    def test_wrap_exe_must_write_wrapper(self):