Line 3: |
Line 3: |
| The project is intended to emulate regular Sugar client behaviour to help, e.g., with testing [[Sugar Server Kit]] components and [[Sugar Server Kit]] based solutions. | | The project is intended to emulate regular Sugar client behaviour to help, e.g., with testing [[Sugar Server Kit]] components and [[Sugar Server Kit]] based solutions. |
| | | |
− | == Using libsugaroid == | + | == Library == |
| | | |
| It is useful for python code that tests, e.g., the school server internals. | | It is useful for python code that tests, e.g., the school server internals. |
Line 11: |
Line 11: |
| == System testing scenarios == | | == System testing scenarios == |
| | | |
− | In this mode, the sugaroid application tries to behave as a regular host with sugar launched on it, including anti-thief features specific only for XO laptops. | + | In this mode, the sugar-unit application tries to behave as a regular host with sugar launched on it, including anti-thief features specific only for XO laptops. |
| | | |
| === Scenario files === | | === Scenario files === |
| | | |
− | Regular use involves writing scenarios—python scripts that need to be launched by the {{Code|sugaroid}} program, i.e., such files need to have headers (you need to have the path to the source {{Code|sugaroid}} file in the {{Code|PATH}} environment variable): | + | Regular use involves writing scenarios—python scripts that need to be launched by the {{Code|sugar-unit}} program, i.e., such files need to have headers (you need to have the path to the source {{Code|sugar-unit}} file in the {{Code|PATH}} environment variable): |
| | | |
− | #!/bin/env sugaroid | + | #!/bin/env sugar-unit |
| | | |
− | Scenario files should have an access point, the function {{Code|main}}: | + | Scenario files should classes inherited from {{Code|sugar_unit.tests.Case}} that are regular {{Code|unittest.TestCase}} classes. |
− | | |
− | def main(context, args):
| |
− | pass
| |
− | | |
− | It will be launched by {{Code|sugaroid}} by passing an execution context as a {{Code|libsugaroid.context.Context}} object along with command-line arguments. The content of the {{Code|main()}} function is exactly the scenario in which {{Code|sugaroid}} should behave.
| |
| | | |
| === Actions === | | === Actions === |
| | | |
− | The building blocks of sugaroid scenarios are actions. Actions are objects of classes inherited from {{Code|libsugaroid.context.Action}}. Action classes represent one particular aspect of some sugar client behaviour, e.g., activation or backup. | + | The building blocks of sugaroid scenarios are actions. Actions are objects of classes inherited from {{Code|sugar_unit.context.Action}}. Action classes represent one particular aspect of some sugar client behaviour, e.g., activation or backup. |
| | | |
| A simple scenario looks like: | | A simple scenario looks like: |
| | | |
− | from libsugaroid.actions import Activation, Registration, Presence, Backup | + | import os |
| + | from sugar_unit import tests, actions |
| + | |
| + | class Test(tests.Case): |
| + | |
| + | def test_XO_walkthrough(self): |
| + | self.assertAction(actions.Activation) |
| + | self.assertAction(actions.Registration, force=True) |
| + | |
| + | ds_path = self.bot.store('foo', 'bar') |
| + | self.assertAction(actions.Backup) |
| + | |
| + | os.unlink(ds_path) |
| + | self.assertAction(actions.Restore) |
| + | assert exists(ds_path) |
| + | assert file(ds_path).read() == 'bar' |
| | | |
− | def main(context, args):
| + | self.assertAction(actions.Presence) |
− | context.call(Activation)
| |
− | context.call(Registration)
| |
− | context.call(Presence)
| |
− | context.call(Backup, tries=1)
| |
| | | |
| === Launch === | | === Launch === |
| | | |
− | The first command-line argument that scenario should receive is a nick of the sugar user. That nick will be used as a directory name in the {{Code|--root}} directory to store all data related to this nick. Thereafter, scenario should take a {{Code|--server}} command-line argument, with the launched [[Sugar_Server_Kit/sugar-server|sugar-server]] address, and a {{Code|--lease_key}} argument, with a path to the public key that was used to sign leases returned by sugar-server.
| + | Useful command-line arguments. |
| + | |
| + | '''nick''' |
| + | |
| + | :: While working, sugar-unit will behave on behalf of only one Sugar user. By default, user's nick is {{Code|test}}, but it might be changed using {{Code|--nick}} command-line argument. The XO serial number and UUID will be calculated basing on nickname. Default nickname is also hardcoded in [[Sugar_Server_Kit/sugar-server|sugar-server]] sources, so, sugar-server will all time have a lease for this nick. For non-default nicknames, the corresponding leases need to be [[Sugar_Server_Kit/sugar-server#activation|registered]] in sugar-server getting SN and UUID from {{Code|sugar-unit id}} output. |
| + | |
| + | '''profile-dir''' |
| + | |
| + | :: sugar-unit will create a directory for Sugar profile, i.e., an analog of profile directories in {{Code|~/.sugar}}. By default, profile directory will be create in the current one using nickname as a directory name. It might be changed using {{Code|--profile-dir}} command-line argument. |
| + | |
| + | '''lease-key''' |
| + | |
| + | :: To verify leases gotten from the sugar-server, sugar-unit should know the lease public key, the default one (that sugar-server uses for default lease) comes with sugar-unit sources. For non-default leases, use the {{Code|--lease-key}} command-line argument to specify the key path. |
| | | |
− | To simplify usage, serial number and UUID will be automatically generated basing on nick names. Thus, there is a fast way in which to let sugar-server know about leases for scenario nicks:
| + | '''api-url''' |
| | | |
− | bc-make-lease `sugaroid id ''nick''` ''days'' | sugar-server activation import_lease
| + | :: By default, sugar-unit will look for default, for sugar-server, server API url, {{Code|localhost:8000}}. But it is possible to specify any other, using the {{Code|--api-url}} command-line argument. |
| | | |
| == Getting involved == | | == Getting involved == |