Platform Team/Server Kit/sugar-unit: Difference between revisions

No edit summary
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 ==