Derived Distros Testing
You need four roles/users:
- A distro owner
- A distro driver
- A distro uploader
- A distro archive admin
The distro owner needs to add the archive admin to the QUEUE_ADMIN users using the API call IArchive.newQueueAdmin(), and add the uploader using either newComponentUploader() or newPackageUploader()
 Single parent
-  New distro/series. Single parent from Ubuntu, i386, any packagesets, copy binaries.
-  Existing series. Keep existing parents/architectures. No packagesets selected. Copy Binaries. (This is the Ubuntu use case)
-  Existing series. Change parent. Same architectures. No packagesets selected. Copy Binaries.
-  New distro/series. Single parent from Ubuntu, i386, one small packageset, rebuild binaries.
Don't use 2 parents from the same distro, you need to make a new distro for each parent.
-  New distro/series. Multi parents, i386, different packagesets from each parent, copy binaries.
-  New distro/series. Multi parents, i386, choose packagesets from each parent that have common packages, copy binaries.
-  Existing series. Keep existing parents/arches/packagesets, copy binaries.
-  Existing series. Change parents. Same arches/packagesets. copy binaries
 Single parent
-  Check the distroseries page for each of the new distroseries in [1-4] above - make sure the new portlet is accurate and other info on the page.
-  Check each of +localpackagediffs, +missingpackages and +uniquepackages for each of  and  above.
-  As a normal user, you should not see the checkboxes on the left and the sync button at the bottom. When logged in as someone who can upload any package, you should see those.
-  Check the distroseries page for each of the new distroseries in [1-3] above. It should mention each parent.
-  Check each of the diff pages. Packages only in one parent will have a "resolved" entry in +localpackagediffs and another entry for the other parent in +uniquepackages.
-  Filter on a packageset name using the text box
-  Filter on a packageset name using the table header
-  Filter on package changed-by
-  Use the API to find differences (IDistroSeries.getDifferencesTo() method)
-  Comment on a difference
-  Change a difference's "ignored" status.
-  Use the API to download comments. (left as an exercise to find out how to do this)
-  Get debdiffs from the last common version.
-  Find a package in +localpackagediffs and click "sync selected packages ..." at the bottom. Check that "Synchronizing" appears next to the package name.
-  When the copy job runs expect that:
- The package is pending publication in the child series
- An email is sent to the person who synced
- An email is sent to the changes list, with the From: as the person who synced
- "Synchronizing..." changes to "Updating ..."
-  Find a package in +missingpackages and click "sync selected packages ..." at the bottom. When the copy job runs expect that:
- The package waits in the NEW queue
-  Approve the package in the NEW queue and wait for the package copy copy to re-run.
- The package should now be in DONE
- The package should be pending publication
- The package should be on +localpackagediffs as a resolved difference (eventually)
-  Repeat  but this time set overrides before accepting. Check that the package is published with the overridden details (component/section).
-  Repeat  but reject the package. Make sure the queue item moves to REJECTED and the diffs page does not show the "Synchronizing..." any more. Check that the package is not copied to the distroseries.
-  Sync a package using the IArchive.copyPackage() API call. Expect the same results as in 
-  Sync a package using the IArchive.copyPackages() API call. A mass sync will occur and no emails are sent.