~ubuntu-branches/ubuntu/saucy/cloud-init/saucy

« back to all changes in this revision

Viewing changes to tests/unittests/test_handler/test_handler_seed_random.py

  • Committer: Scott Moser
  • Date: 2013-09-11 21:04:19 UTC
  • mfrom: (1.4.5)
  • Revision ID: smoser@ubuntu.com-20130911210419-3vt5ze6ph3hu8dz1
* New upstream snapshot.
  * Add OpenNebula datasource.
  * Support reading 'random_seed' from metadata and writing to /dev/urandom
  * fix for bug in log_time.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
            #    Copyright (C) 2013 Hewlett-Packard Development Company, L.P.
 
2
#
 
3
#    Author: Juerg Haefliger <juerg.haefliger@hp.com>
 
4
#
 
5
#    Based on test_handler_set_hostname.py
 
6
#
 
7
#    This program is free software: you can redistribute it and/or modify
 
8
#    it under the terms of the GNU General Public License version 3, as
 
9
#    published by the Free Software Foundation.
 
10
#
 
11
#    This program is distributed in the hope that it will be useful,
 
12
#    but WITHOUT ANY WARRANTY; without even the implied warranty of
 
13
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
14
#    GNU General Public License for more details.
 
15
#
 
16
#    You should have received a copy of the GNU General Public License
 
17
#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
18
 
 
19
from cloudinit.config import cc_seed_random
 
20
 
 
21
import base64
 
22
import tempfile
 
23
import gzip
 
24
 
 
25
from StringIO import StringIO
 
26
 
 
27
from cloudinit import cloud
 
28
from cloudinit import distros
 
29
from cloudinit import helpers
 
30
from cloudinit import util
 
31
 
 
32
from cloudinit.sources import DataSourceNone
 
33
 
 
34
from tests.unittests import helpers as t_help
 
35
 
 
36
import logging
 
37
 
 
38
LOG = logging.getLogger(__name__)
 
39
 
 
40
 
 
41
class TestRandomSeed(t_help.TestCase):
 
42
    def setUp(self):
 
43
        super(TestRandomSeed, self).setUp()
 
44
        self._seed_file = tempfile.mktemp()
 
45
 
 
46
    def tearDown(self):
 
47
        util.del_file(self._seed_file)
 
48
 
 
49
    def _compress(self, text):
 
50
        contents = StringIO()
 
51
        gz_fh = gzip.GzipFile(mode='wb', fileobj=contents)
 
52
        gz_fh.write(text)
 
53
        gz_fh.close()
 
54
        return contents.getvalue()
 
55
 
 
56
    def _get_cloud(self, distro, metadata=None):
 
57
        paths = helpers.Paths({})
 
58
        cls = distros.fetch(distro)
 
59
        ubuntu_distro = cls(distro, {}, paths)
 
60
        ds = DataSourceNone.DataSourceNone({}, ubuntu_distro, paths)
 
61
        if metadata:
 
62
            ds.metadata = metadata
 
63
        return cloud.Cloud(ds, paths, {}, ubuntu_distro, None)
 
64
 
 
65
    def test_append_random(self):
 
66
        cfg = {
 
67
            'random_seed': {
 
68
                'file': self._seed_file,
 
69
                'data': 'tiny-tim-was-here',
 
70
            }
 
71
        }
 
72
        cc_seed_random.handle('test', cfg, self._get_cloud('ubuntu'), LOG, [])
 
73
        contents = util.load_file(self._seed_file)
 
74
        self.assertEquals("tiny-tim-was-here", contents)
 
75
 
 
76
    def test_append_random_unknown_encoding(self):
 
77
        data = self._compress("tiny-toe")
 
78
        cfg = {
 
79
            'random_seed': {
 
80
                'file': self._seed_file,
 
81
                'data': data,
 
82
                'encoding': 'special_encoding',
 
83
            }
 
84
        }
 
85
        self.assertRaises(IOError, cc_seed_random.handle, 'test', cfg,
 
86
                          self._get_cloud('ubuntu'), LOG, [])
 
87
 
 
88
    def test_append_random_gzip(self):
 
89
        data = self._compress("tiny-toe")
 
90
        cfg = {
 
91
            'random_seed': {
 
92
                'file': self._seed_file,
 
93
                'data': data,
 
94
                'encoding': 'gzip',
 
95
            }
 
96
        }
 
97
        cc_seed_random.handle('test', cfg, self._get_cloud('ubuntu'), LOG, [])
 
98
        contents = util.load_file(self._seed_file)
 
99
        self.assertEquals("tiny-toe", contents)
 
100
 
 
101
    def test_append_random_gz(self):
 
102
        data = self._compress("big-toe")
 
103
        cfg = {
 
104
            'random_seed': {
 
105
                'file': self._seed_file,
 
106
                'data': data,
 
107
                'encoding': 'gz',
 
108
            }
 
109
        }
 
110
        cc_seed_random.handle('test', cfg, self._get_cloud('ubuntu'), LOG, [])
 
111
        contents = util.load_file(self._seed_file)
 
112
        self.assertEquals("big-toe", contents)
 
113
 
 
114
    def test_append_random_base64(self):
 
115
        data = base64.b64encode('bubbles')
 
116
        cfg = {
 
117
            'random_seed': {
 
118
                'file': self._seed_file,
 
119
                'data': data,
 
120
                'encoding': 'base64',
 
121
            }
 
122
        }
 
123
        cc_seed_random.handle('test', cfg, self._get_cloud('ubuntu'), LOG, [])
 
124
        contents = util.load_file(self._seed_file)
 
125
        self.assertEquals("bubbles", contents)
 
126
 
 
127
    def test_append_random_b64(self):
 
128
        data = base64.b64encode('kit-kat')
 
129
        cfg = {
 
130
            'random_seed': {
 
131
                'file': self._seed_file,
 
132
                'data': data,
 
133
                'encoding': 'b64',
 
134
            }
 
135
        }
 
136
        cc_seed_random.handle('test', cfg, self._get_cloud('ubuntu'), LOG, [])
 
137
        contents = util.load_file(self._seed_file)
 
138
        self.assertEquals("kit-kat", contents)
 
139
 
 
140
    def test_append_random_metadata(self):
 
141
        cfg = {
 
142
            'random_seed': {
 
143
                'file': self._seed_file,
 
144
                'data': 'tiny-tim-was-here',
 
145
            }
 
146
        }
 
147
        c = self._get_cloud('ubuntu', {'random_seed': '-so-was-josh'})
 
148
        cc_seed_random.handle('test', cfg, c, LOG, [])
 
149
        contents = util.load_file(self._seed_file)
 
150
        self.assertEquals('tiny-tim-was-here-so-was-josh', contents)