| 1 | -*- indented-text -*- | 
|---|
| 2 |  | 
|---|
| 3 | (set lotus no) | 
|---|
| 4 |  | 
|---|
| 5 |  | 
|---|
| 6 |  | 
|---|
| 7 | Notes on using comfychair with Samba (samba testing framework units): | 
|---|
| 8 |  | 
|---|
| 9 | The tests need to rely on some external resources, such as | 
|---|
| 10 |  | 
|---|
| 11 | If suitable resources are not available, need to skip particular | 
|---|
| 12 | tests.  Must include a message indicating what resources would be | 
|---|
| 13 | needed to run that test.  (e.g. must be root.) | 
|---|
| 14 |  | 
|---|
| 15 | We want to be able to select and run particular subsets of tests, such | 
|---|
| 16 | as "all winbind tests". | 
|---|
| 17 |  | 
|---|
| 18 | We want to keep the number of configurable parameters down as much as | 
|---|
| 19 | possible, to make it easy on people running the tests. | 
|---|
| 20 |  | 
|---|
| 21 | Wherever possible, the tests should set up their preconditions, but a | 
|---|
| 22 | few basic resources need to be provided by the people running the | 
|---|
| 23 | tests.  So for example, rather than asking the user for the name of a | 
|---|
| 24 | non-root user, we should give the tests the administrator name and | 
|---|
| 25 | password, and it can create a new user to use. | 
|---|
| 26 |  | 
|---|
| 27 | This makes it simpler to get the tests running, and possible also | 
|---|
| 28 | makes them more reproducible. | 
|---|
| 29 |  | 
|---|
| 30 | In the future, rather than using NT machines provided by the test | 
|---|
| 31 | person, we might have a way to drive VMWare non-persistent sessions, | 
|---|
| 32 | to make tests even more tightly controlled. | 
|---|
| 33 |  | 
|---|
| 34 |  | 
|---|
| 35 | Another design question is how to communicate this information to the | 
|---|
| 36 | tests.  If there's a lot of settings, then it might need to be stored | 
|---|
| 37 | in a configuration file. | 
|---|
| 38 |  | 
|---|
| 39 | However, if we succeed in cutting down the number of parameters, then | 
|---|
| 40 | it might be straightforward to pass the information on the command | 
|---|
| 41 | line or in an environment variable. | 
|---|
| 42 |  | 
|---|
| 43 | Environment variables are probably better because they can't be seen | 
|---|
| 44 | by other users, and they are more easily passed down through an | 
|---|
| 45 | invocation of "make check". | 
|---|
| 46 |  | 
|---|
| 47 |  | 
|---|
| 48 |  | 
|---|
| 49 |  | 
|---|
| 50 | Notes on Samba Testing Framework for Unittests | 
|---|
| 51 | ---------------------------------------------- | 
|---|
| 52 |  | 
|---|
| 53 | This is to be read after reading the notes.txt from comfychair.  I'm | 
|---|
| 54 | proposing a slightly more concrete description of what's described | 
|---|
| 55 | there. | 
|---|
| 56 |  | 
|---|
| 57 | The model of having tests require named resources looks useful for | 
|---|
| 58 | incorporation into a framework that can be run by many people in | 
|---|
| 59 | widely different environments. | 
|---|
| 60 |  | 
|---|
| 61 | Some possible environments for running the test framework in are: | 
|---|
| 62 |  | 
|---|
| 63 | - Casual downloader of Samba compiling from source and just wants | 
|---|
| 64 | to run 'make check'.  May only have one Unix machine and a | 
|---|
| 65 | handful of clients. | 
|---|
| 66 |  | 
|---|
| 67 | - Samba team member with access to a small number of other | 
|---|
| 68 | machines or VMware sessions. | 
|---|
| 69 |  | 
|---|
| 70 | - PSA developer who may not have intimate knowledge of Samba | 
|---|
| 71 | internals and is only interested in testing against the PSA. | 
|---|
| 72 |  | 
|---|
| 73 | - Non-team hacker wanting to run test suite after making small | 
|---|
| 74 | hacks. | 
|---|
| 75 |  | 
|---|
| 76 | - Build farm environment (loaner machine with no physical access | 
|---|
| 77 | or root privilege). | 
|---|
| 78 |  | 
|---|
| 79 | - HP BAT. | 
|---|
| 80 |  | 
|---|
| 81 | Developers in most of these environments are also potential test case | 
|---|
| 82 | authors.  It should be easy for people unfamiliar with the framework | 
|---|
| 83 | to write new tests and have them work.  We should provide examples and | 
|---|
| 84 | the existing tests should well written and understandable. | 
|---|
| 85 |  | 
|---|
| 86 | Different types of tests: | 
|---|
| 87 |  | 
|---|
| 88 | - Tests that check Samba internals and link against | 
|---|
| 89 | libbigballofmud.so.  For example: | 
|---|
| 90 |  | 
|---|
| 91 | - Upper/lowercase string functions | 
|---|
| 92 | - user_in_list() for large lists | 
|---|
| 93 |  | 
|---|
| 94 | - Tests that use the Samba Python extensions. | 
|---|
| 95 |  | 
|---|
| 96 | - Tests that execute Samba command line programs, for example | 
|---|
| 97 | smbpasswd. | 
|---|
| 98 |  | 
|---|
| 99 | - Tests that require other resources on the network such as domain | 
|---|
| 100 | controllers or PSAs. | 
|---|
| 101 |  | 
|---|
| 102 | - Tests that are performed on the documentation or the source code | 
|---|
| 103 | such as: | 
|---|
| 104 |  | 
|---|
| 105 | - grep for common spelling mistakes made by abartlet (-: | 
|---|
| 106 | - grep for company copyright (IBM, HP) | 
|---|
| 107 |  | 
|---|
| 108 | - Link to other existing testing frameworks (smbtorture, | 
|---|
| 109 | abartlet's bash based build farm tests) | 
|---|
| 110 |  | 
|---|
| 111 | I propose a TestResourceManager which would be instantiated by a test | 
|---|
| 112 | case.  The test case would require("resourcename") as part of its | 
|---|
| 113 | constructor and raise a comfychair.NotRun exception if the resource | 
|---|
| 114 | was not present.  A TestResource class could be defined which could | 
|---|
| 115 | read a configuration file or examine a environment variable and | 
|---|
| 116 | register a resource only if some condition was satisfied. | 
|---|
| 117 |  | 
|---|
| 118 | It would be nice to be able to completely separate the PSA testing | 
|---|
| 119 | from the test framework.  This would entail being able to define test | 
|---|
| 120 | resources dynamically, possibly with a plugin type system. | 
|---|
| 121 |  | 
|---|
| 122 | class TestResourceManager: | 
|---|
| 123 | def __init__(self, name): | 
|---|
| 124 | self.resources = {} | 
|---|
| 125 |  | 
|---|
| 126 | def register(self, resource): | 
|---|
| 127 | name = resource.name() | 
|---|
| 128 | if self.resources.has_key(name): | 
|---|
| 129 | raise "Test manager already has resource %s" % name | 
|---|
| 130 | self.resources[name] = resource | 
|---|
| 131 |  | 
|---|
| 132 | def require(self, resource_name): | 
|---|
| 133 | if not self.resources.has_key(resource_name): | 
|---|
| 134 | raise "Test manager does not have resources %s" % resource_name | 
|---|
| 135 |  | 
|---|
| 136 | class TestResource: | 
|---|
| 137 | def __init__(self, name): | 
|---|
| 138 | self.name = name | 
|---|
| 139 |  | 
|---|
| 140 | def name(self): | 
|---|
| 141 | return self.name | 
|---|
| 142 |  | 
|---|
| 143 | import os | 
|---|
| 144 |  | 
|---|
| 145 | trm = TestResourceManager() | 
|---|
| 146 |  | 
|---|
| 147 | if os.getuid() == 0: | 
|---|
| 148 | trm.register(TestResource("root")) | 
|---|
| 149 |  | 
|---|
| 150 | A config-o-matic Python module can take a list of machines and | 
|---|
| 151 | administrator%password entries and classify them by operating system | 
|---|
| 152 | version and service pack.  These resources would be registered with | 
|---|
| 153 | the TestResourceManager. | 
|---|
| 154 |  | 
|---|
| 155 | Some random thoughts about named resources for network servers: | 
|---|
| 156 |  | 
|---|
| 157 | require("nt4.sp3") | 
|---|
| 158 | require("nt4.domaincontroller") | 
|---|
| 159 | require("psa") | 
|---|
| 160 |  | 
|---|
| 161 | Some kind of format for location of passwords, libraries: | 
|---|
| 162 |  | 
|---|
| 163 | require("exec(smbpasswd)") | 
|---|
| 164 | require("lib(bigballofmud)") | 
|---|
| 165 |  | 
|---|
| 166 | maybe require("exec.smbpasswd") looks nicer... | 
|---|
| 167 |  | 
|---|
| 168 | The require() function could return a dictionary of configuration | 
|---|
| 169 | information or some handle to fetch dynamic information on.  We may | 
|---|
| 170 | need to create and destroy extra users or print queues.  How to manage | 
|---|
| 171 | cleanup of dynamic resources? | 
|---|
| 172 |  | 
|---|
| 173 | Requirements for running stf: | 
|---|
| 174 |  | 
|---|
| 175 | - Python, obviously | 
|---|
| 176 | - Samba python extensions | 
|---|