1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- # -*- coding: utf-8 -*-
- """
- Tests the localfs tokens interface.
- """
- from __future__ import absolute_import, print_function, unicode_literals
- import os
- import salt.exceptions
- import salt.tokens.localfs
- import salt.utils.files
- from tests.support.helpers import with_tempdir
- from tests.support.mock import patch
- from tests.support.unit import TestCase
- class CalledWith(object):
- def __init__(self, func, called_with=None):
- self.func = func
- if called_with is None:
- self.called_with = []
- else:
- self.called_with = called_with
- def __call__(self, *args, **kwargs):
- self.called_with.append((args, kwargs))
- return self.func(*args, **kwargs)
- class WriteTokenTest(TestCase):
- @with_tempdir()
- def test_write_token(self, tmpdir):
- """
- Validate tokens put in place with an atomic move
- """
- opts = {"token_dir": tmpdir}
- fopen = CalledWith(salt.utils.files.fopen)
- rename = CalledWith(os.rename)
- with patch("salt.utils.files.fopen", fopen), patch("os.rename", rename):
- tdata = salt.tokens.localfs.mk_token(opts, {})
- assert "token" in tdata
- t_path = os.path.join(tmpdir, tdata["token"])
- temp_t_path = "{}.tmp".format(t_path)
- assert len(fopen.called_with) == 1, len(fopen.called_with)
- assert fopen.called_with == [((temp_t_path, "w+b"), {})], fopen.called_with
- assert len(rename.called_with) == 1, len(rename.called_with)
- assert rename.called_with == [((temp_t_path, t_path), {})], rename.called_with
- class TestLocalFS(TestCase):
- def setUp(self):
- # Default expected data
- self.expected_data = {"this": "is", "some": "token data"}
- @with_tempdir()
- def test_get_token_should_return_token_if_exists(self, tempdir):
- opts = {"token_dir": tempdir}
- tok = salt.tokens.localfs.mk_token(opts=opts, tdata=self.expected_data,)[
- "token"
- ]
- actual_data = salt.tokens.localfs.get_token(opts=opts, tok=tok)
- self.assertDictEqual(self.expected_data, actual_data)
- @with_tempdir()
- def test_get_token_should_raise_SaltDeserializationError_if_token_file_is_empty(
- self, tempdir
- ):
- opts = {"token_dir": tempdir}
- tok = salt.tokens.localfs.mk_token(opts=opts, tdata=self.expected_data,)[
- "token"
- ]
- with salt.utils.files.fopen(os.path.join(tempdir, tok), "w") as f:
- f.truncate()
- with self.assertRaises(salt.exceptions.SaltDeserializationError) as e:
- salt.tokens.localfs.get_token(opts=opts, tok=tok)
- @with_tempdir()
- def test_get_token_should_raise_SaltDeserializationError_if_token_file_is_malformed(
- self, tempdir
- ):
- opts = {"token_dir": tempdir}
- tok = salt.tokens.localfs.mk_token(opts=opts, tdata=self.expected_data,)[
- "token"
- ]
- with salt.utils.files.fopen(os.path.join(tempdir, tok), "w") as f:
- f.truncate()
- f.write("this is not valid msgpack data")
- with self.assertRaises(salt.exceptions.SaltDeserializationError) as e:
- salt.tokens.localfs.get_token(opts=opts, tok=tok)
|