mirror of
				https://github.com/jtesta/ssh-audit.git
				synced 2025-10-30 21:15:27 +01:00 
			
		
		
		
	Output and OutputBuffer tests.
This commit is contained in:
		
							
								
								
									
										190
									
								
								test/test_output.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										190
									
								
								test/test_output.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,190 @@ | |||||||
|  | #!/usr/bin/env python | ||||||
|  | # -*- coding: utf-8 -*- | ||||||
|  | from __future__ import print_function | ||||||
|  | import pytest, io, sys | ||||||
|  |  | ||||||
|  |  | ||||||
|  | if sys.version_info[0] == 2: | ||||||
|  | 	import StringIO | ||||||
|  | 	StringIO = StringIO.StringIO | ||||||
|  | else: | ||||||
|  | 	StringIO = io.StringIO | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class TestOutput(object): | ||||||
|  | 	@pytest.fixture(autouse=True) | ||||||
|  | 	def init(self, ssh_audit): | ||||||
|  | 		self.Output = ssh_audit.Output | ||||||
|  | 		self.OutputBuffer = ssh_audit.OutputBuffer | ||||||
|  | 	 | ||||||
|  | 	def _begin(self): | ||||||
|  | 		self.__out = StringIO() | ||||||
|  | 		self.__old_stdout = sys.stdout | ||||||
|  | 		sys.stdout = self.__out | ||||||
|  | 		 | ||||||
|  | 	def _flush(self): | ||||||
|  | 		lines = self.__out.getvalue().splitlines() | ||||||
|  | 		sys.stdout = self.__old_stdout | ||||||
|  | 		self.__out = None | ||||||
|  | 		return lines | ||||||
|  | 	 | ||||||
|  | 	def test_output_buffer_no_lines(self): | ||||||
|  | 		self._begin() | ||||||
|  | 		with self.OutputBuffer() as obuf: | ||||||
|  | 			pass | ||||||
|  | 		assert self._flush() == [] | ||||||
|  | 		self._begin() | ||||||
|  | 		with self.OutputBuffer() as obuf: | ||||||
|  | 			pass | ||||||
|  | 		obuf.flush() | ||||||
|  | 		assert self._flush() == [] | ||||||
|  | 	 | ||||||
|  | 	def test_output_buffer_no_flush(self): | ||||||
|  | 		self._begin() | ||||||
|  | 		with self.OutputBuffer() as obuf: | ||||||
|  | 			print(u'abc') | ||||||
|  | 		assert self._flush() == [] | ||||||
|  | 	 | ||||||
|  | 	def test_output_buffer_flush(self): | ||||||
|  | 		self._begin() | ||||||
|  | 		with self.OutputBuffer() as obuf: | ||||||
|  | 			print(u'abc') | ||||||
|  | 			print() | ||||||
|  | 			print(u'def') | ||||||
|  | 		obuf.flush() | ||||||
|  | 		assert self._flush() == [u'abc', u'', u'def'] | ||||||
|  | 	 | ||||||
|  | 	def test_output_defaults(self): | ||||||
|  | 		out = self.Output() | ||||||
|  | 		# default: on | ||||||
|  | 		assert out.batch == False | ||||||
|  | 		assert out.colors == True | ||||||
|  | 		assert out.minlevel == 'info' | ||||||
|  | 	 | ||||||
|  | 	def test_output_colors(self): | ||||||
|  | 		out = self.Output() | ||||||
|  | 		# test without colors | ||||||
|  | 		out.colors = False | ||||||
|  | 		self._begin() | ||||||
|  | 		out.info('info color') | ||||||
|  | 		assert self._flush() == [u'info color'] | ||||||
|  | 		self._begin() | ||||||
|  | 		out.head('head color') | ||||||
|  | 		assert self._flush() == [u'head color'] | ||||||
|  | 		self._begin() | ||||||
|  | 		out.good('good color') | ||||||
|  | 		assert self._flush() == [u'good color'] | ||||||
|  | 		self._begin() | ||||||
|  | 		out.warn('warn color') | ||||||
|  | 		assert self._flush() == [u'warn color'] | ||||||
|  | 		self._begin() | ||||||
|  | 		out.fail('fail color') | ||||||
|  | 		assert self._flush() == [u'fail color'] | ||||||
|  | 		# test with colors | ||||||
|  | 		out.colors = True | ||||||
|  | 		self._begin() | ||||||
|  | 		out.info('info color') | ||||||
|  | 		assert self._flush() == [u'info color'] | ||||||
|  | 		self._begin() | ||||||
|  | 		out.head('head color') | ||||||
|  | 		assert self._flush() == [u'\x1b[0;36mhead color\x1b[0m'] | ||||||
|  | 		self._begin() | ||||||
|  | 		out.good('good color') | ||||||
|  | 		assert self._flush() == [u'\x1b[0;32mgood color\x1b[0m'] | ||||||
|  | 		self._begin() | ||||||
|  | 		out.warn('warn color') | ||||||
|  | 		assert self._flush() == [u'\x1b[0;33mwarn color\x1b[0m'] | ||||||
|  | 		self._begin() | ||||||
|  | 		out.fail('fail color') | ||||||
|  | 		assert self._flush() == [u'\x1b[0;31mfail color\x1b[0m'] | ||||||
|  | 	 | ||||||
|  | 	def test_output_sep(self): | ||||||
|  | 		out = self.Output() | ||||||
|  | 		self._begin() | ||||||
|  | 		out.sep() | ||||||
|  | 		out.sep() | ||||||
|  | 		out.sep() | ||||||
|  | 		assert self._flush() == [u'', u'', u''] | ||||||
|  | 	 | ||||||
|  | 	def test_output_levels(self): | ||||||
|  | 		out = self.Output() | ||||||
|  | 		assert out.getlevel('info') == 0 | ||||||
|  | 		assert out.getlevel('good') == 0 | ||||||
|  | 		assert out.getlevel('warn') == 1 | ||||||
|  | 		assert out.getlevel('fail') == 2 | ||||||
|  | 		assert out.getlevel('unknown') > 2 | ||||||
|  | 	 | ||||||
|  | 	def test_output_minlevel_property(self): | ||||||
|  | 		out = self.Output() | ||||||
|  | 		out.minlevel = 'info' | ||||||
|  | 		assert out.minlevel == 'info' | ||||||
|  | 		out.minlevel = 'good' | ||||||
|  | 		assert out.minlevel == 'info' | ||||||
|  | 		out.minlevel = 'warn' | ||||||
|  | 		assert out.minlevel == 'warn' | ||||||
|  | 		out.minlevel = 'fail' | ||||||
|  | 		assert out.minlevel == 'fail' | ||||||
|  | 		out.minlevel = 'invalid level' | ||||||
|  | 		assert out.minlevel == 'unknown' | ||||||
|  | 	 | ||||||
|  | 	def test_output_minlevel(self): | ||||||
|  | 		out = self.Output() | ||||||
|  | 		# visible: all | ||||||
|  | 		out.minlevel = 'info' | ||||||
|  | 		self._begin() | ||||||
|  | 		out.info('info color') | ||||||
|  | 		out.head('head color') | ||||||
|  | 		out.good('good color') | ||||||
|  | 		out.warn('warn color') | ||||||
|  | 		out.fail('fail color') | ||||||
|  | 		assert len(self._flush()) == 5 | ||||||
|  | 		# visible: head, warn, fail | ||||||
|  | 		out.minlevel = 'warn' | ||||||
|  | 		self._begin() | ||||||
|  | 		out.info('info color') | ||||||
|  | 		out.head('head color') | ||||||
|  | 		out.good('good color') | ||||||
|  | 		out.warn('warn color') | ||||||
|  | 		out.fail('fail color') | ||||||
|  | 		assert len(self._flush()) == 3 | ||||||
|  | 		# visible: head, fail | ||||||
|  | 		out.minlevel = 'fail' | ||||||
|  | 		self._begin() | ||||||
|  | 		out.info('info color') | ||||||
|  | 		out.head('head color') | ||||||
|  | 		out.good('good color') | ||||||
|  | 		out.warn('warn color') | ||||||
|  | 		out.fail('fail color') | ||||||
|  | 		assert len(self._flush()) == 2 | ||||||
|  | 		# visible: head | ||||||
|  | 		out.minlevel = 'invalid level' | ||||||
|  | 		self._begin() | ||||||
|  | 		out.info('info color') | ||||||
|  | 		out.head('head color') | ||||||
|  | 		out.good('good color') | ||||||
|  | 		out.warn('warn color') | ||||||
|  | 		out.fail('fail color') | ||||||
|  | 		assert len(self._flush()) == 1 | ||||||
|  | 	 | ||||||
|  | 	def test_output_batch(self): | ||||||
|  | 		out = self.Output() | ||||||
|  | 		# visible: all | ||||||
|  | 		self._begin() | ||||||
|  | 		out.minlevel = 'info' | ||||||
|  | 		out.batch = False | ||||||
|  | 		out.info('info color') | ||||||
|  | 		out.head('head color') | ||||||
|  | 		out.good('good color') | ||||||
|  | 		out.warn('warn color') | ||||||
|  | 		out.fail('fail color') | ||||||
|  | 		assert len(self._flush()) == 5 | ||||||
|  | 		# visible: all except head | ||||||
|  | 		self._begin() | ||||||
|  | 		out.minlevel = 'info' | ||||||
|  | 		out.batch = True | ||||||
|  | 		out.info('info color') | ||||||
|  | 		out.head('head color') | ||||||
|  | 		out.good('good color') | ||||||
|  | 		out.warn('warn color') | ||||||
|  | 		out.fail('fail color') | ||||||
|  | 		assert len(self._flush()) == 4 | ||||||
		Reference in New Issue
	
	Block a user
	 Andris Raugulis
					Andris Raugulis