blob: 4e16edc3c40f3be6836641d4ff333184bb0a8e50 [file] [log] [blame]
#!/usr/bin/env vpython
# Copyright 2013 The LUCI Authors. All rights reserved.
# Use of this source code is governed under the Apache License, Version 2.0
# that can be found in the LICENSE file.
import os
import unittest
import test_env
from recipe_engine import step_runner
class TestLinebuf(unittest.TestCase):
def test_add_partial(self):
lb = step_runner._streamingLinebuf()
lb.ingest("blarf")
self.assertEqual([], lb.get_buffered())
self.assertEqual([], lb.buffedlines)
self.assertEqual("blarf", lb.extra.getvalue())
def test_add_whole(self):
lb = step_runner._streamingLinebuf()
lb.ingest("blarf\n")
self.assertEqual(["blarf"], lb.get_buffered())
self.assertEqual([], lb.buffedlines)
self.assertEqual("", lb.extra.getvalue())
def test_add_partial_whole(self):
lb = step_runner._streamingLinebuf()
lb.ingest("foof\nfleem\nblarf")
self.assertEqual(["foof", "fleem"], lb.get_buffered())
lb.ingest("dweeble\nwat")
self.assertEqual(["blarfdweeble"], lb.get_buffered())
self.assertEqual([], lb.buffedlines)
self.assertEqual("wat", lb.extra.getvalue())
def test_leftovers(self):
lb = step_runner._streamingLinebuf()
lb.ingest("nerds")
self.assertEqual([], lb.get_buffered())
lb.ingest("doop\n")
self.assertEqual(["nerdsdoop"], lb.get_buffered())
self.assertEqual([], lb.get_buffered())
self.assertEqual([], lb.buffedlines)
self.assertEqual("", lb.extra.getvalue())
class TestMergeEnvs(unittest.TestCase):
def setUp(self):
self.original = {
'FOO': 'foo',
}
@staticmethod
def pathjoin(*parts):
return os.pathsep.join(parts)
def _merge(self, overrides, prefixes, suffixes):
return step_runner._merge_envs(self.original, overrides, prefixes, suffixes,
os.pathsep)
def test_nothing_to_do(self):
self.assertEqual(
self._merge({}, {}, {}),
self.original)
def test_merge_with_empty_path_tuple(self):
self.assertEqual(self._merge(
{'FOO': ''}, {'FOO': ()}, {'FOO': ()}),
{'FOO': ''})
def test_merge_with_path_tuple(self):
self.assertEqual(self._merge(
{}, {'BAR': ('bar', 'baz')}, {'BAR': ('hat',)}),
{'FOO': 'foo', 'BAR': self.pathjoin('bar', 'baz', 'hat')})
def test_merge_with_path_tuple_and_orig_env(self):
self.assertEqual(self._merge(
{}, {'FOO': ('bar', 'baz')}, {'FOO': ('hat',)}),
{'FOO': self.pathjoin('bar', 'baz', 'foo', 'hat')})
def test_merge_with_path_tuple_and_env(self):
self.assertEqual(self._merge(
{'FOO': 'override'}, {'FOO': ('bar', 'baz')}, {'FOO': ('hat',)}),
{'FOO': self.pathjoin('bar', 'baz', 'override', 'hat')})
def test_merge_with_path_tuple_and_env_subst(self):
self.assertEqual(self._merge(
{'FOO': 'a-%(FOO)s-b'}, {'FOO': ('bar', 'baz')}, {'FOO': ('hat',)}),
{'FOO': self.pathjoin('bar', 'baz', 'a-foo-b', 'hat')})
def test_merge_with_path_tuple_and_env_empty_subst(self):
self.original['FOO'] = ''
self.assertEqual(self._merge(
{'FOO': '%(FOO)s'}, {'FOO': ('bar', 'baz')}, {'FOO': ('hat',)}),
{'FOO': self.pathjoin('bar', 'baz', 'hat')})
def test_merge_with_path_tuple_and_env_clear(self):
self.assertEqual(self._merge(
{'FOO': None}, {'FOO': ('bar', 'baz')}, {'FOO': ('hat',)}),
{'FOO': self.pathjoin('bar', 'baz', 'hat')})
def test_merge_with_subst(self):
self.assertEqual(self._merge(
{'FOO': 'a-%(FOO)s-b'}, {}, {}),
{'FOO': 'a-foo-b'})
def test_merge_with_empty_subst(self):
self.original['FOO'] = ''
self.assertEqual(self._merge(
{'FOO': '%(FOO)s'}, {}, {}),
{'FOO': ''})
def test_merge_with_clear(self):
self.assertEqual(self._merge(
{'FOO': None}, {}, {}),
{})
if __name__ == '__main__':
unittest.main()