summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cloudinit/util.py18
-rw-r--r--tests/unittests/helpers.py25
-rw-r--r--tests/unittests/test__init__.py6
-rw-r--r--tests/unittests/test_cs_util.py16
-rw-r--r--tests/unittests/test_datasource/test_azure.py7
-rw-r--r--tests/unittests/test_datasource/test_cloudsigma.py1
-rw-r--r--tests/unittests/test_datasource/test_configdrive.py6
-rw-r--r--tests/unittests/test_datasource/test_maas.py5
-rw-r--r--tests/unittests/test_datasource/test_nocloud.py7
-rw-r--r--tests/unittests/test_datasource/test_opennebula.py4
-rw-r--r--tests/unittests/test_distros/test_netconfig.py4
-rw-r--r--tests/unittests/test_distros/test_resolv.py4
-rw-r--r--tests/unittests/test_distros/test_sysconfig.py4
-rw-r--r--tests/unittests/test_distros/test_user_data_normalize.py7
-rw-r--r--tests/unittests/test_handler/test_handler_apt_configure.py3
-rw-r--r--tests/unittests/test_handler/test_handler_ca_certs.py7
-rw-r--r--tests/unittests/test_handler/test_handler_growpart.py3
-rw-r--r--tests/unittests/test_pathprefix2dict.py6
-rw-r--r--tests/unittests/test_templating.py19
-rw-r--r--tests/unittests/test_util.py15
-rw-r--r--tox.ini10
21 files changed, 122 insertions, 55 deletions
diff --git a/cloudinit/util.py b/cloudinit/util.py
index 32c19ba2..766f8e32 100644
--- a/cloudinit/util.py
+++ b/cloudinit/util.py
@@ -2059,23 +2059,23 @@ def _read_dmi_syspath(key):
Reads dmi data with from /sys/class/dmi/id
"""
- dmi_key = "{}/{}".format(DMI_SYS_PATH, key)
- LOG.debug("querying dmi data {}".format(dmi_key))
+ dmi_key = "{0}/{1}".format(DMI_SYS_PATH, key)
+ LOG.debug("querying dmi data {0}".format(dmi_key))
try:
if not os.path.exists(dmi_key):
- LOG.debug("did not find {}".format(dmi_key))
+ LOG.debug("did not find {0}".format(dmi_key))
return None
key_data = load_file(dmi_key)
if not key_data:
- LOG.debug("{} did not return any data".format(key))
+ LOG.debug("{0} did not return any data".format(key))
return None
- LOG.debug("dmi data {} returned {}".format(dmi_key, key_data))
+ LOG.debug("dmi data {0} returned {0}".format(dmi_key, key_data))
return key_data.strip()
except Exception as e:
- logexc(LOG, "failed read of {}".format(dmi_key), e)
+ logexc(LOG, "failed read of {0}".format(dmi_key), e)
return None
@@ -2087,10 +2087,10 @@ def _call_dmidecode(key, dmidecode_path):
try:
cmd = [dmidecode_path, "--string", key]
(result, _err) = subp(cmd)
- LOG.debug("dmidecode returned '{}' for '{}'".format(result, key))
+ LOG.debug("dmidecode returned '{0}' for '{0}'".format(result, key))
return result
except OSError as _err:
- LOG.debug('failed dmidecode cmd: {}\n{}'.format(cmd, _err.message))
+ LOG.debug('failed dmidecode cmd: {0}\n{0}'.format(cmd, _err.message))
return None
@@ -2106,7 +2106,7 @@ def read_dmi_data(key):
if dmidecode_path:
return _call_dmidecode(key, dmidecode_path)
- LOG.warn("did not find either path {} or dmidecode command".format(
+ LOG.warn("did not find either path {0} or dmidecode command".format(
DMI_SYS_PATH))
return None
diff --git a/tests/unittests/helpers.py b/tests/unittests/helpers.py
index 828579e8..424d0626 100644
--- a/tests/unittests/helpers.py
+++ b/tests/unittests/helpers.py
@@ -39,8 +39,20 @@ else:
PY3 = True
if PY26:
- # For now add these on, taken from python 2.7 + slightly adjusted
+ # For now add these on, taken from python 2.7 + slightly adjusted. Drop
+ # all this once Python 2.6 is dropped as a minimum requirement.
class TestCase(unittest.TestCase):
+ def setUp(self):
+ unittest.TestCase.setUp(self)
+ self.__all_cleanups = ExitStack()
+
+ def tearDown(self):
+ self.__all_cleanups.close()
+ unittest.TestCase.tearDown(self)
+
+ def addCleanup(self, function, *args, **kws):
+ self.__all_cleanups.callback(function, *args, **kws)
+
def assertIs(self, expr1, expr2, msg=None):
if expr1 is not expr2:
standardMsg = '%r is not %r' % (expr1, expr2)
@@ -63,6 +75,13 @@ if PY26:
standardMsg = standardMsg % (value)
self.fail(self._formatMessage(msg, standardMsg))
+ def assertIsInstance(self, obj, cls, msg=None):
+ """Same as self.assertTrue(isinstance(obj, cls)), with a nicer
+ default message."""
+ if not isinstance(obj, cls):
+ standardMsg = '%s is not an instance of %r' % (repr(obj), cls)
+ self.fail(self._formatMessage(msg, standardMsg))
+
def assertDictContainsSubset(self, expected, actual, msg=None):
missing = []
mismatched = []
@@ -126,9 +145,9 @@ def retarget_many_wrapper(new_base, am, old_func):
return wrapper
-class ResourceUsingTestCase(unittest.TestCase):
+class ResourceUsingTestCase(TestCase):
def setUp(self):
- unittest.TestCase.setUp(self)
+ TestCase.setUp(self)
self.resource_path = None
def resourceLocation(self, subname=None):
diff --git a/tests/unittests/test__init__.py b/tests/unittests/test__init__.py
index f5dc3435..1a307e56 100644
--- a/tests/unittests/test__init__.py
+++ b/tests/unittests/test__init__.py
@@ -18,6 +18,8 @@ from cloudinit import settings
from cloudinit import url_helper
from cloudinit import util
+from .helpers import TestCase
+
class FakeModule(handlers.Handler):
def __init__(self):
@@ -31,10 +33,10 @@ class FakeModule(handlers.Handler):
pass
-class TestWalkerHandleHandler(unittest.TestCase):
+class TestWalkerHandleHandler(TestCase):
def setUp(self):
- unittest.TestCase.setUp(self)
+ super(TestWalkerHandleHandler, self).setUp()
tmpdir = tempfile.mkdtemp()
self.addCleanup(shutil.rmtree, tmpdir)
diff --git a/tests/unittests/test_cs_util.py b/tests/unittests/test_cs_util.py
index 99fac84d..337ac9a0 100644
--- a/tests/unittests/test_cs_util.py
+++ b/tests/unittests/test_cs_util.py
@@ -1,7 +1,21 @@
+from __future__ import print_function
+
+import sys
import unittest
from cloudinit.cs_utils import Cepko
+try:
+ skip = unittest.skip
+except AttributeError:
+ # Python 2.6. Doesn't have to be high fidelity.
+ def skip(reason):
+ def decorator(func):
+ def wrapper(*args, **kws):
+ print(reason, file=sys.stderr)
+ return wrapper
+ return decorator
+
SERVER_CONTEXT = {
"cpu": 1000,
@@ -29,7 +43,7 @@ class CepkoMock(Cepko):
# 2015-01-22 BAW: This test is completely useless because it only ever tests
# the CepkoMock object. Even in its original form, I don't think it ever
# touched the underlying Cepko class methods.
-@unittest.skip('This test is completely useless')
+@skip('This test is completely useless')
class CepkoResultTests(unittest.TestCase):
def setUp(self):
pass
diff --git a/tests/unittests/test_datasource/test_azure.py b/tests/unittests/test_datasource/test_azure.py
index 1f0330b3..97a53bee 100644
--- a/tests/unittests/test_datasource/test_azure.py
+++ b/tests/unittests/test_datasource/test_azure.py
@@ -1,7 +1,7 @@
from cloudinit import helpers
from cloudinit.util import load_file
from cloudinit.sources import DataSourceAzure
-from ..helpers import populate_dir
+from ..helpers import TestCase, populate_dir
try:
from unittest import mock
@@ -84,9 +84,10 @@ def construct_valid_ovf_env(data=None, pubkeys=None, userdata=None):
return content
-class TestAzureDataSource(unittest.TestCase):
+class TestAzureDataSource(TestCase):
def setUp(self):
+ super(TestAzureDataSource, self).setUp()
self.tmp = tempfile.mkdtemp()
self.addCleanup(shutil.rmtree, self.tmp)
@@ -416,7 +417,7 @@ class TestAzureDataSource(unittest.TestCase):
load_file(os.path.join(self.waagent_d, 'ovf-env.xml')))
-class TestReadAzureOvf(unittest.TestCase):
+class TestReadAzureOvf(TestCase):
def test_invalid_xml_raises_non_azure_ds(self):
invalid_xml = "<foo>" + construct_valid_ovf_env(data={})
self.assertRaises(DataSourceAzure.BrokenAzureDataSource,
diff --git a/tests/unittests/test_datasource/test_cloudsigma.py b/tests/unittests/test_datasource/test_cloudsigma.py
index 306ac7d8..772d189a 100644
--- a/tests/unittests/test_datasource/test_cloudsigma.py
+++ b/tests/unittests/test_datasource/test_cloudsigma.py
@@ -39,6 +39,7 @@ class CepkoMock(Cepko):
class DataSourceCloudSigmaTest(test_helpers.TestCase):
def setUp(self):
+ super(DataSourceCloudSigmaTest, self).setUp()
self.datasource = DataSourceCloudSigma.DataSourceCloudSigma("", "", "")
self.datasource.is_running_in_cloudsigma = lambda: True
self.datasource.cepko = CepkoMock(SERVER_CONTEXT)
diff --git a/tests/unittests/test_datasource/test_configdrive.py b/tests/unittests/test_datasource/test_configdrive.py
index 258c68e2..fd930877 100644
--- a/tests/unittests/test_datasource/test_configdrive.py
+++ b/tests/unittests/test_datasource/test_configdrive.py
@@ -3,7 +3,6 @@ import json
import os
import shutil
import tempfile
-import unittest
try:
from unittest import mock
@@ -20,6 +19,9 @@ from cloudinit.sources import DataSourceConfigDrive as ds
from cloudinit.sources.helpers import openstack
from cloudinit import util
+from ..helpers import TestCase
+
+
PUBKEY = u'ssh-rsa AAAAB3NzaC1....sIkJhq8wdX+4I3A4cYbYP ubuntu@server-460\n'
EC2_META = {
'ami-id': 'ami-00000001',
@@ -70,7 +72,7 @@ CFG_DRIVE_FILES_V2 = {
'openstack/latest/user_data': USER_DATA}
-class TestConfigDriveDataSource(unittest.TestCase):
+class TestConfigDriveDataSource(TestCase):
def setUp(self):
super(TestConfigDriveDataSource, self).setUp()
diff --git a/tests/unittests/test_datasource/test_maas.py b/tests/unittests/test_datasource/test_maas.py
index 6af0cd82..d25e1adc 100644
--- a/tests/unittests/test_datasource/test_maas.py
+++ b/tests/unittests/test_datasource/test_maas.py
@@ -2,11 +2,10 @@ from copy import copy
import os
import shutil
import tempfile
-import unittest
from cloudinit.sources import DataSourceMAAS
from cloudinit import url_helper
-from ..helpers import populate_dir
+from ..helpers import TestCase, populate_dir
try:
from unittest import mock
@@ -14,7 +13,7 @@ except ImportError:
import mock
-class TestMAASDataSource(unittest.TestCase):
+class TestMAASDataSource(TestCase):
def setUp(self):
super(TestMAASDataSource, self).setUp()
diff --git a/tests/unittests/test_datasource/test_nocloud.py b/tests/unittests/test_datasource/test_nocloud.py
index 480a4012..4f967f58 100644
--- a/tests/unittests/test_datasource/test_nocloud.py
+++ b/tests/unittests/test_datasource/test_nocloud.py
@@ -1,7 +1,7 @@
from cloudinit import helpers
from cloudinit.sources import DataSourceNoCloud
from cloudinit import util
-from ..helpers import populate_dir
+from ..helpers import TestCase, populate_dir
import os
import yaml
@@ -19,9 +19,10 @@ except ImportError:
from contextlib2 import ExitStack
-class TestNoCloudDataSource(unittest.TestCase):
+class TestNoCloudDataSource(TestCase):
def setUp(self):
+ super(TestNoCloudDataSource, self).setUp()
self.tmp = tempfile.mkdtemp()
self.addCleanup(shutil.rmtree, self.tmp)
self.paths = helpers.Paths({'cloud_dir': self.tmp})
@@ -34,8 +35,6 @@ class TestNoCloudDataSource(unittest.TestCase):
self.mocks.enter_context(
mock.patch.object(util, 'get_cmdline', return_value=self.cmdline))
- super(TestNoCloudDataSource, self).setUp()
-
def test_nocloud_seed_dir(self):
md = {'instance-id': 'IID', 'dsmode': 'local'}
ud = "USER_DATA_HERE"
diff --git a/tests/unittests/test_datasource/test_opennebula.py b/tests/unittests/test_datasource/test_opennebula.py
index ef534bab..e5a4bd18 100644
--- a/tests/unittests/test_datasource/test_opennebula.py
+++ b/tests/unittests/test_datasource/test_opennebula.py
@@ -1,7 +1,7 @@
from cloudinit import helpers
from cloudinit.sources import DataSourceOpenNebula as ds
from cloudinit import util
-from ..helpers import populate_dir
+from ..helpers import TestCase, populate_dir
from base64 import b64encode
import os
@@ -46,7 +46,7 @@ CMD_IP_OUT = '''\
'''
-class TestOpenNebulaDataSource(unittest.TestCase):
+class TestOpenNebulaDataSource(TestCase):
parsed_user = None
def setUp(self):
diff --git a/tests/unittests/test_distros/test_netconfig.py b/tests/unittests/test_distros/test_netconfig.py
index 91e630ae..6d30c5b8 100644
--- a/tests/unittests/test_distros/test_netconfig.py
+++ b/tests/unittests/test_distros/test_netconfig.py
@@ -1,5 +1,4 @@
import os
-import unittest
try:
from unittest import mock
@@ -11,6 +10,7 @@ except ImportError:
from contextlib2 import ExitStack
from six import StringIO
+from ..helpers import TestCase
from cloudinit import distros
from cloudinit import helpers
@@ -80,7 +80,7 @@ class WriteBuffer(object):
return self.buffer.getvalue()
-class TestNetCfgDistro(unittest.TestCase):
+class TestNetCfgDistro(TestCase):
def _get_distro(self, dname):
cls = distros.fetch(dname)
diff --git a/tests/unittests/test_distros/test_resolv.py b/tests/unittests/test_distros/test_resolv.py
index 779b83e3..faaf5b7f 100644
--- a/tests/unittests/test_distros/test_resolv.py
+++ b/tests/unittests/test_distros/test_resolv.py
@@ -1,7 +1,7 @@
from cloudinit.distros.parsers import resolv_conf
import re
-import unittest
+from ..helpers import TestCase
BASE_RESOLVE = '''
@@ -13,7 +13,7 @@ nameserver 10.15.30.92
BASE_RESOLVE = BASE_RESOLVE.strip()
-class TestResolvHelper(unittest.TestCase):
+class TestResolvHelper(TestCase):
def test_parse_same(self):
rp = resolv_conf.ResolvConf(BASE_RESOLVE)
rp_r = str(rp).strip()
diff --git a/tests/unittests/test_distros/test_sysconfig.py b/tests/unittests/test_distros/test_sysconfig.py
index f66201b3..03d89a10 100644
--- a/tests/unittests/test_distros/test_sysconfig.py
+++ b/tests/unittests/test_distros/test_sysconfig.py
@@ -1,13 +1,13 @@
import re
-import unittest
from cloudinit.distros.parsers.sys_conf import SysConf
+from ..helpers import TestCase
# Lots of good examples @
# http://content.hccfl.edu/pollock/AUnix1/SysconfigFilesDesc.txt
-class TestSysConfHelper(unittest.TestCase):
+class TestSysConfHelper(TestCase):
# This function was added in 2.7, make it work for 2.6
def assertRegMatches(self, text, regexp):
regexp = re.compile(regexp)
diff --git a/tests/unittests/test_distros/test_user_data_normalize.py b/tests/unittests/test_distros/test_user_data_normalize.py
index b90d6185..e4488e2a 100644
--- a/tests/unittests/test_distros/test_user_data_normalize.py
+++ b/tests/unittests/test_distros/test_user_data_normalize.py
@@ -1,9 +1,10 @@
-import unittest
-
from cloudinit import distros
from cloudinit import helpers
from cloudinit import settings
+from ..helpers import TestCase
+
+
bcfg = {
'name': 'bob',
'plain_text_passwd': 'ubuntu',
@@ -15,7 +16,7 @@ bcfg = {
}
-class TestUGNormalize(unittest.TestCase):
+class TestUGNormalize(TestCase):
def _make_distro(self, dtype, def_user=None):
cfg = dict(settings.CFG_BUILTIN)
diff --git a/tests/unittests/test_handler/test_handler_apt_configure.py b/tests/unittests/test_handler/test_handler_apt_configure.py
index d72fa8c7..6bccff11 100644
--- a/tests/unittests/test_handler/test_handler_apt_configure.py
+++ b/tests/unittests/test_handler/test_handler_apt_configure.py
@@ -1,6 +1,7 @@
from cloudinit import util
from cloudinit.config import cc_apt_configure
+from ..helpers import TestCase
import os
import re
@@ -9,7 +10,7 @@ import tempfile
import unittest
-class TestAptProxyConfig(unittest.TestCase):
+class TestAptProxyConfig(TestCase):
def setUp(self):
super(TestAptProxyConfig, self).setUp()
self.tmp = tempfile.mkdtemp()
diff --git a/tests/unittests/test_handler/test_handler_ca_certs.py b/tests/unittests/test_handler/test_handler_ca_certs.py
index 97213a0c..a6b9c0fd 100644
--- a/tests/unittests/test_handler/test_handler_ca_certs.py
+++ b/tests/unittests/test_handler/test_handler_ca_certs.py
@@ -3,6 +3,7 @@ from cloudinit import helpers
from cloudinit import util
from cloudinit.config import cc_ca_certs
+from ..helpers import TestCase
import logging
import shutil
@@ -45,7 +46,7 @@ class TestNoConfig(unittest.TestCase):
self.assertEqual(certs_mock.call_count, 0)
-class TestConfig(unittest.TestCase):
+class TestConfig(TestCase):
def setUp(self):
super(TestConfig, self).setUp()
self.name = "ca-certs"
@@ -139,7 +140,7 @@ class TestConfig(unittest.TestCase):
self.assertEqual(self.mock_remove.call_count, 1)
-class TestAddCaCerts(unittest.TestCase):
+class TestAddCaCerts(TestCase):
def setUp(self):
super(TestAddCaCerts, self).setUp()
@@ -241,7 +242,7 @@ class TestUpdateCaCerts(unittest.TestCase):
["update-ca-certificates"], capture=False)
-class TestRemoveDefaultCaCerts(unittest.TestCase):
+class TestRemoveDefaultCaCerts(TestCase):
def setUp(self):
super(TestRemoveDefaultCaCerts, self).setUp()
diff --git a/tests/unittests/test_handler/test_handler_growpart.py b/tests/unittests/test_handler/test_handler_growpart.py
index 89727863..bef0d80d 100644
--- a/tests/unittests/test_handler/test_handler_growpart.py
+++ b/tests/unittests/test_handler/test_handler_growpart.py
@@ -2,6 +2,7 @@ from cloudinit import cloud
from cloudinit import util
from cloudinit.config import cc_growpart
+from ..helpers import TestCase
import errno
import logging
@@ -72,7 +73,7 @@ class TestDisabled(unittest.TestCase):
self.assertEqual(mockobj.call_count, 0)
-class TestConfig(unittest.TestCase):
+class TestConfig(TestCase):
def setUp(self):
super(TestConfig, self).setUp()
self.name = "growpart"
diff --git a/tests/unittests/test_pathprefix2dict.py b/tests/unittests/test_pathprefix2dict.py
index 38a56dc2..d38260e6 100644
--- a/tests/unittests/test_pathprefix2dict.py
+++ b/tests/unittests/test_pathprefix2dict.py
@@ -1,15 +1,15 @@
from cloudinit import util
-from .helpers import populate_dir
+from .helpers import TestCase, populate_dir
import shutil
import tempfile
-import unittest
-class TestPathPrefix2Dict(unittest.TestCase):
+class TestPathPrefix2Dict(TestCase):
def setUp(self):
+ TestCase.setUp(self)
self.tmp = tempfile.mkdtemp()
self.addCleanup(shutil.rmtree, self.tmp)
diff --git a/tests/unittests/test_templating.py b/tests/unittests/test_templating.py
index 957467f6..fbad405f 100644
--- a/tests/unittests/test_templating.py
+++ b/tests/unittests/test_templating.py
@@ -16,6 +16,9 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
+from __future__ import print_function
+
+import sys
import six
import unittest
@@ -24,6 +27,20 @@ import textwrap
from cloudinit import templater
+try:
+ skipIf = unittest.skipIf
+except AttributeError:
+ # Python 2.6. Doesn't have to be high fidelity.
+ def skipIf(condition, reason):
+ def decorator(func):
+ def wrapper(*args, **kws):
+ if condition:
+ return func(*args, **kws)
+ else:
+ print(reason, file=sys.stderr)
+ return wrapper
+ return decorator
+
class TestTemplates(test_helpers.TestCase):
def test_render_basic(self):
@@ -41,7 +58,7 @@ class TestTemplates(test_helpers.TestCase):
out_data = templater.basic_render(in_data, {'b': 2})
self.assertEqual(expected_data.strip(), out_data)
- @unittest.skipIf(six.PY3, 'Cheetah is not compatible with Python 3')
+ @skipIf(six.PY3, 'Cheetah is not compatible with Python 3')
def test_detection(self):
blob = "## template:cheetah"
diff --git a/tests/unittests/test_util.py b/tests/unittests/test_util.py
index 7a224230..a1bd2c46 100644
--- a/tests/unittests/test_util.py
+++ b/tests/unittests/test_util.py
@@ -7,7 +7,6 @@ import shutil
import tempfile
from . import helpers
-import unittest
import six
try:
@@ -38,7 +37,7 @@ class FakeSelinux(object):
self.restored.append(path)
-class TestGetCfgOptionListOrStr(unittest.TestCase):
+class TestGetCfgOptionListOrStr(helpers.TestCase):
def test_not_found_no_default(self):
"""None is returned if key is not found and no default given."""
config = {}
@@ -70,7 +69,7 @@ class TestGetCfgOptionListOrStr(unittest.TestCase):
self.assertEqual([], result)
-class TestWriteFile(unittest.TestCase):
+class TestWriteFile(helpers.TestCase):
def setUp(self):
super(TestWriteFile, self).setUp()
self.tmp = tempfile.mkdtemp()
@@ -149,7 +148,7 @@ class TestWriteFile(unittest.TestCase):
mockobj.assert_called_once_with('selinux')
-class TestDeleteDirContents(unittest.TestCase):
+class TestDeleteDirContents(helpers.TestCase):
def setUp(self):
super(TestDeleteDirContents, self).setUp()
self.tmp = tempfile.mkdtemp()
@@ -215,20 +214,20 @@ class TestDeleteDirContents(unittest.TestCase):
self.assertDirEmpty(self.tmp)
-class TestKeyValStrings(unittest.TestCase):
+class TestKeyValStrings(helpers.TestCase):
def test_keyval_str_to_dict(self):
expected = {'1': 'one', '2': 'one+one', 'ro': True}
cmdline = "1=one ro 2=one+one"
self.assertEqual(expected, util.keyval_str_to_dict(cmdline))
-class TestGetCmdline(unittest.TestCase):
+class TestGetCmdline(helpers.TestCase):
def test_cmdline_reads_debug_env(self):
os.environ['DEBUG_PROC_CMDLINE'] = 'abcd 123'
self.assertEqual(os.environ['DEBUG_PROC_CMDLINE'], util.get_cmdline())
-class TestLoadYaml(unittest.TestCase):
+class TestLoadYaml(helpers.TestCase):
mydefault = "7b03a8ebace993d806255121073fed52"
def test_simple(self):
@@ -335,7 +334,7 @@ class TestReadDMIData(helpers.FilesystemMockingTestCase):
self._patchIn(new_root)
util.ensure_dir(os.path.join('sys', 'class', 'dmi', 'id'))
- dmi_key = "/sys/class/dmi/id/{}".format(key)
+ dmi_key = "/sys/class/dmi/id/{0}".format(key)
util.write_file(dmi_key, content)
def _no_syspath(self, key, content):
diff --git a/tox.ini b/tox.ini
index e547c693..d04cd47c 100644
--- a/tox.ini
+++ b/tox.ini
@@ -11,3 +11,13 @@ deps =
nose
pep8==1.5.7
pyflakes
+
+[testenv:py26]
+commands = nosetests tests
+deps =
+ contextlib2
+ httpretty>=0.7.1
+ mock
+ nose
+ pep8==1.5.7
+ pyflakes