94 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			94 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
# -*- coding: utf-8 -*-
 | 
						|
# vim: tabstop=4 shiftwidth=4 softtabstop=4
 | 
						|
 | 
						|
# Copyright 2013, Red Hat, Inc.
 | 
						|
#
 | 
						|
# Licensed under the Apache License, Version 2.0 (the "License"); you may
 | 
						|
# not use this file except in compliance with the License. You may obtain
 | 
						|
# a copy of the License at
 | 
						|
#
 | 
						|
#      http://www.apache.org/licenses/LICENSE-2.0
 | 
						|
#
 | 
						|
# Unless required by applicable law or agreed to in writing, software
 | 
						|
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 | 
						|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 | 
						|
# License for the specific language governing permissions and limitations
 | 
						|
# under the License.
 | 
						|
 | 
						|
import shutil
 | 
						|
import tempfile
 | 
						|
import subprocess
 | 
						|
 | 
						|
 | 
						|
class FakePopen(object):
 | 
						|
    def __init__(self, returncode=0):
 | 
						|
        self.returncode = returncode
 | 
						|
        self.stdout = self.stderr = self.data = ""
 | 
						|
 | 
						|
    def __call__(self, *args, **kwargs):
 | 
						|
        self.args = args
 | 
						|
        self.kwargs = kwargs
 | 
						|
        return self
 | 
						|
 | 
						|
    def communicate(self, data=None):
 | 
						|
        self.data += data or ''
 | 
						|
        return self.stdout, self.stderr
 | 
						|
 | 
						|
 | 
						|
class PackstackTestCaseMixin(object):
 | 
						|
    """
 | 
						|
    Implementation of some assertion methods available by default
 | 
						|
    in Python2.7+ only
 | 
						|
    """
 | 
						|
    def setUp(self):
 | 
						|
        # Creating a temp directory that can be used by tests
 | 
						|
        self.tempdir = tempfile.mkdtemp()
 | 
						|
 | 
						|
        # some plugins call popen, we're replacing it for tests
 | 
						|
        self._Popen = subprocess.Popen
 | 
						|
        self.fake_popen = subprocess.Popen = FakePopen()
 | 
						|
 | 
						|
    def tearDown(self):
 | 
						|
        # remove the temp directory
 | 
						|
        shutil.rmtree(self.tempdir)
 | 
						|
        subprocess.Popen = self._Popen
 | 
						|
 | 
						|
    def assertItemsEqual(self, list1, list2, msg=None):
 | 
						|
        f, s = len(list1), len(list2)
 | 
						|
        _msg = msg or ('Element counts were not equal. First has %s, '
 | 
						|
                       'Second has %s' % (f, s))
 | 
						|
        self.assertEqual(f, s, msg=_msg)
 | 
						|
 | 
						|
        _msg = msg or ('Given lists differ:\n%(list1)s'
 | 
						|
                       '\n%(list2)s' % locals())
 | 
						|
        for i in list1:
 | 
						|
            if i not in list2:
 | 
						|
                raise AssertionError(_msg)
 | 
						|
 | 
						|
    def assertListEqual(self, list1, list2, msg=None):
 | 
						|
        f, s = len(list1), len(list2)
 | 
						|
        _msg = msg or ('Element counts were not equal. First has %s, '
 | 
						|
                       'Second has %s' % (f, s))
 | 
						|
        self.assertEqual(f, s, msg=_msg)
 | 
						|
 | 
						|
        _msg = msg or ('Given lists differ:\n%(list1)s'
 | 
						|
                       '\n%(list2)s' % locals())
 | 
						|
        for index, item in enumerate(list1):
 | 
						|
            if item != list2[index]:
 | 
						|
                raise AssertionError(_msg)
 | 
						|
 | 
						|
    def assertIsInstance(self, obj, cls, msg=None):
 | 
						|
        _msg = msg or ('%s is not an instance of %s' % (obj, cls))
 | 
						|
        if not isinstance(obj, cls):
 | 
						|
            raise AssertionError(_msg)
 | 
						|
 | 
						|
    def assertIn(self, first, second, msg=None):
 | 
						|
        _msg = msg or ('%s is not a member of %s' % (first, second))
 | 
						|
        if first not in second:
 | 
						|
            raise AssertionError(_msg)
 | 
						|
 | 
						|
    def assertIsNone(self, expr, msg=None):
 | 
						|
        _msg = msg or ('%s is not None' % expr)
 | 
						|
        if expr is not None:
 | 
						|
            raise AssertionError(_msg)
 |