mirror of
				https://github.com/apache/cloudstack.git
				synced 2025-10-26 08:42:29 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			76 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			76 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| Requirements
 | |
| ============
 | |
| To run these tests, first get the vagrant setup for the systemvm working,
 | |
| see ../../tools/vagrant/systemvm.
 | |
| 
 | |
| Then, install dependencies
 | |
| 
 | |
|     pip install nose paramiko python-vagrant envassert cuisine fabric
 | |
| 
 | |
| Running tests
 | |
| =============
 | |
| Then run the tests using your favorite python unittest runner
 | |
| 
 | |
|     nosetests-2.7
 | |
| 
 | |
| If you have already started the systemvm with 'vagrant up', that VM will get
 | |
| used for all the tests.
 | |
| 
 | |
| If you have not started the systemvm yet, it will be started and stopped for
 | |
| every test case. That's nice for test isolation, but it's very slow, so it is
 | |
| not recommended.
 | |
| 
 | |
| You can also run these tests out of the box with PyDev or PyCharm or whatever.
 | |
| 
 | |
| Adding tests
 | |
| ============
 | |
| Simply create new test_xxx.py files with test cases that extend from
 | |
| SystemVMTestCase.
 | |
| 
 | |
| Use [envassert](https://pypi.python.org/pypi/envassert) checks to define
 | |
| your test assertions.
 | |
| 
 | |
| Use [cuisine](https://pypi.python.org/pypi/cuisine),
 | |
| [fab](https://pypi.python.org/pypi/Fabric), or
 | |
| [paramiko](https://pypi.python.org/pypi/paramiko) to otherwise interact with
 | |
| the systemvm. When you do, please consider creating your own little wrappers
 | |
| around fab run. I.e. the pattern is
 | |
| 
 | |
| ```
 | |
| from __future__ import with_statement
 | |
| from fabric.api import run, hide
 | |
| 
 | |
| def something_to_do(argument):
 | |
|     with hide("everything"):
 | |
|         result = run("do something %s" % argument).wrangle()
 | |
|         return "expected" in result
 | |
| ```
 | |
| 
 | |
| for a new kind of check and then in your test
 | |
| 
 | |
| ```
 | |
| class HelloSystemVMTestCase(SystemVMTestCase):
 | |
|     @attr(tags=["systemvm"], required_hardware="true")
 | |
|     def test_something(self):
 | |
|         assert something_to_do('foo')
 | |
| ```
 | |
| 
 | |
| Edit, test, edit, test
 | |
| ======================
 | |
| The SystemVM Vagrantfile sets up rsync from systemvm/patches. These rsyncs run
 | |
| once, when you type 'vagrant up'. To do these rsyncs every time you change a
 | |
| patch file, run 'vagrant rsync-auto'. With that, your development process can
 | |
| be,
 | |
| 
 | |
| * once, start up vagrant with 'vagrant up'
 | |
| * once, start up the rsync watcher with 'vagrant rsync-auto'
 | |
| * iterate:
 | |
|   * write a test, save the file
 | |
|   * run 'nostests' to check that the test fails
 | |
|   * change a systemvm script to help the test pass, save the file
 | |
|   * vagrant rsyncs the changed file
 | |
|   * run 'nosetests' to check that the test now passes
 | |
| 
 | |
| If you use PyDev or PyCharm you can set it up to watch your test files for
 | |
| changes and auto-run any changed tests.
 |