Decide where "packaging tests" should live. #2049

Open
opened 2013-08-07 19:37:33 +00:00 by nejucomo · 30 comments

Task: Define a policy about where packaging tests live, where buildbot configuration lives, then specify that policy on the wiki.

Details:

We'd benefit from "packaging tests" which are different from unittests. The latter target a prepared installation or repository checkout, whereas packaging tests have these distinctions:

Inputs: Packaging tests may target as input:

  • build tests - a fresh repository checkout in order to test creation of distribution formats -- e.g. sdist, linux distro packages, sumo tarballs, etc...
  • installation tests - a locally prepared distribution format -- e.g. sdist, .deb, etc...
  • distribution tests - the network -- e.g. a PyPI package name and http(s) connections to python packaging mirrors; a debian package name and connections to debian repositories; etc...

Staging or Production: We might like to run the same tests against unreleased versions and distinctly against "the live internet".

  • Staging tests might rely on a local PyPI mirror to ensure that if we were to distribute sdists to the real PyPI, then users will probably successfully be able to install them.
  • Production tests rely on the actual distribution that live users use. Failures of these tests let us know when our released packages are unavailable to users, and can help identify why.

Brittleness: sensitivity to transient conditions:

  • Packaging tests start from either a repository clone or an sdist and should behave fairly deterministically without networking.
  • Installation tests start from local packaging files, and should behave deterministically, barring system state issues.
  • Distributions tests necessarily use the internet and will give false positives for transient errors. (Note: Errors due to transient outages are important information! Suppose tahoe-lafs install relies on some.third-party.package.host.example.com and that site goes down. We want to know that people are now unable to install tahoe-lafs through specific channels.)

We may want different packaging tests to live in different places depending on these axes. Some of these tests may not require buildbot, and/or may not be developed or maintained by us at all! For example, tests which verify live PyPI packages may be run by PyPI itself. We should still account for this in an "official policy".

We probably want test infrastructure operators to have some flexibility to only run some categories of tests. For example, a debian test box would not want to run windows installation tests, or some operators may prefer to limit networking and only run non-distribution tests.

**Task:** Define a policy about where packaging tests live, where buildbot configuration lives, then specify that policy on the wiki. **Details:** We'd benefit from "packaging tests" which are different from unittests. The latter target a prepared installation or repository checkout, whereas packaging tests have these distinctions: **Inputs:** Packaging tests may target as input: * *build tests* - a fresh repository checkout in order to test creation of distribution formats -- *e.g.* `sdist`, `linux distro packages`, sumo tarballs, etc... * *installation tests* - a locally prepared distribution format -- *e.g.* `sdist`, `.deb`, etc... * *distribution tests* - the network -- *e.g.* a PyPI package name and `http(s)` connections to python packaging mirrors; a debian package name and connections to debian repositories; etc... **Staging or Production**: We might like to run the same tests against unreleased versions and distinctly against "the live internet". * *Staging tests* might rely on a local PyPI mirror to ensure that *if we were* to distribute sdists to the real PyPI, *then* users will probably successfully be able to install them. * *Production tests* rely on the actual distribution that live users use. Failures of these tests let us know when our released packages are unavailable to users, and can help identify why. **Brittleness**: sensitivity to transient conditions: * Packaging tests start from either a repository clone or an sdist and should behave fairly deterministically without networking. * Installation tests start from local packaging files, and should behave deterministically, barring system state issues. * Distributions tests necessarily use the internet and will give false positives for transient errors. (*Note:* Errors due to transient outages are important information! Suppose `tahoe-lafs` install relies on `some.third-party.package.host.example.com` and that site goes down. We want to know that people are now unable to install `tahoe-lafs` through specific channels.) We may want different packaging tests to live in different places depending on these axes. Some of these tests may not require buildbot, and/or may not be developed or maintained by us at all! For example, tests which verify live PyPI packages may be run by PyPI itself. We should still account for this in an "official policy". We probably want test infrastructure operators to have some flexibility to only run some categories of tests. For example, a debian test box would not want to run windows installation tests, or some operators may prefer to limit networking and only run non-distribution tests.
nejucomo added the
c/unknown
p/normal
t/task
v/1.10.0
labels 2013-08-07 19:37:33 +00:00
nejucomo added this to the undecided milestone 2013-08-07 19:37:33 +00:00
daira was assigned by nejucomo 2013-08-07 19:37:33 +00:00
Author

Note: We might have some tests that are abstracted over the target package. For example a distribution test which takes as input a PyPI package named $PKG:

  1. Create a new pristine virtualenv; activate it.
  2. $ pip install $pkg
  3. Fail if the installation fails.
  4. Fail if http connections were attempted without ssl.
  5. Run the installed packages unit tests; fail if they fail.
  6. Otherwise, pass.

If this were adopted as a packaging goal/specification, we could apply it to allmydata-tahoe, zfec, pyutil, pycryptopp, etc...

Note: We might have some tests that are abstracted over the target package. For example a distribution test which takes as input a PyPI package named $PKG: 1. Create a new pristine virtualenv; activate it. 1. $ pip install $pkg 1. Fail if the installation fails. 1. Fail if `http` connections were attempted without `ssl`. 1. Run the installed packages unit tests; fail if they fail. 1. Otherwise, pass. If this were adopted as a packaging goal/specification, we could apply it to `allmydata-tahoe`, `zfec`, `pyutil`, `pycryptopp`, etc...
Author

Zooko points out that if the tests live in the main tahoe-lafs repository, then when they are invoked they may incorrectly import the local unpackaged code, or make other dependency mistakes.

Zooko points out that if the tests live in the main `tahoe-lafs` repository, then when they are invoked they may incorrectly import the local unpackaged code, or make other dependency mistakes.

I'm strongly in favour of having these tests in a separate repo on github (and moving any existing such tests into that repo).

I'm strongly in favour of having these tests in a separate repo on github (and moving any existing such tests into that repo).
(https://github.com/tahoe-lafs/packaging-tests) ?
daira added
c/dev-infrastructure
and removed
c/unknown
labels 2013-08-18 20:56:39 +00:00
daira modified the milestone from undecided to soon (release n/a) 2013-08-18 20:56:39 +00:00

Replying to daira:

https://github.com/tahoe-lafs/packaging-tests ?

Yes, please!

As far as I know, only Brian has the authority to create new repos under https://github.com/tahoe-lafs.

(Well, only Brian, all the people who have root at github.com, and DigiCert, and all of the root CAs, and people who have owned root CAs, and the makers of web browsers. I actually hope to fix this before colonizing outer space.)

Replying to [daira](/tahoe-lafs/trac/issues/2049#issuecomment-394692): > <https://github.com/tahoe-lafs/packaging-tests> ? Yes, please! As far as I know, only Brian has the authority to create new repos under <https://github.com/tahoe-lafs>. (Well, only Brian, all the people who have root at github.com, and DigiCert, and all of the root CAs, and people who have owned root CAs, and the makers of web browsers. I actually hope to fix this *before* colonizing outer space.)

Replying to daira:

I'm strongly in favour of having these tests in a separate repo on github (and moving any existing such tests into that repo).

Any existing such tests:

Replying to [daira](/tahoe-lafs/trac/issues/2049#issuecomment-394691): > I'm strongly in favour of having these tests in a separate repo on github (and moving any existing such tests into that repo). Any existing such tests: * [TestOldDep](https://github.com/zooko/buildbot-config-tahoe/blame/027e2fe1646863df46c15977cb3ed9badde100bf/bbsupport.py#l123) * [TestAlreadyHaveDep](https://github.com/zooko/buildbot-config-tahoe/blame/027e2fe1646863df46c15977cb3ed9badde100bf/bbsupport.py#l136) * [InstallToEgg](https://github.com/zooko/buildbot-config-tahoe/blame/027e2fe1646863df46c15977cb3ed9badde100bf/bbsupport.py#l440) * [InstallToPrefixDir](https://github.com/zooko/buildbot-config-tahoe/blame/027e2fe1646863df46c15977cb3ed9badde100bf/bbsupport.py#l461) * [TestFromEggTrial](https://github.com/zooko/buildbot-config-tahoe/blame/027e2fe1646863df46c15977cb3ed9badde100bf/bbsupport.py#l477) * [TestFromEgg](https://github.com/zooko/buildbot-config-tahoe/blame/027e2fe1646863df46c15977cb3ed9badde100bf/bbsupport.py#l518) * [TestFromPrefixDirPyunit](https://github.com/zooko/buildbot-config-tahoe/blame/027e2fe1646863df46c15977cb3ed9badde100bf/bbsupport.py#l561) * [TestFromPrefixDirRunTrial](https://github.com/zooko/buildbot-config-tahoe/blame/027e2fe1646863df46c15977cb3ed9badde100bf/bbsupport.py#l598)

Brian: would you please create a repo named https://github.com/tahoe-lafs/packaging-tests ?

Brian: would you please create a repo named <https://github.com/tahoe-lafs/packaging-tests> ?
daira was unassigned by zooko 2013-08-27 12:02:08 +00:00
warner was assigned by zooko 2013-08-27 12:02:08 +00:00

Replying to [zooko]comment:6:

[...]
(Well, only Brian, all the people who have root at github.com, and DigiCert, and all of the root CAs, and people who have owned root CAs, and the makers of web browsers. I actually hope to fix this before colonizing outer space.)

Hmm, I'm not sure that should be a blocker for our interstellar exploration plans ;-)

Replying to [zooko]comment:6: > [...] > (Well, only Brian, all the people who have root at github.com, and DigiCert, and all of the root CAs, and people who have owned root CAs, and the makers of web browsers. I actually hope to fix this *before* colonizing outer space.) Hmm, I'm not sure that should be a blocker for our interstellar exploration plans ;-)

Oh look there was an old duplicate of this: #1248, which has some relevant detail in it. Please check it out. I'm closing #1248 as a duplicate of this.

Oh look there was an old duplicate of this: #1248, which has some relevant detail in it. Please check it out. I'm closing #1248 as a duplicate of this.

I'm -0. I'll create that repo if you want, but first I'd like to push back on the notion that these tests ought to live outside of the main source tree.

Zooko points out that if the tests live in the main tahoe-lafs repository, then when they are invoked they may incorrectly import the local unpackaged code, or make other dependency mistakes.

I think it's easy to avoid that. Our bin/tahoe looks in its parent directory for the marker file that indicates it should include ../src and ../support, etc. But if we unpack the sdist into a subdirectory, and run the new bin/tahoe, it won't look in the original tree for anything.

(One counter-example would be if something in the build process wants to know if it's in a git checkout, for which git walks all the way to the filesystem root looking for a .git directory. I don't think that's a big deal.)

More repositories means more places for contributors to look, more divergence between code and tests. Also it raises the buildbot question of which repo's changes should trigger the tests being run (presumably you'd want to trigger on changes in either source-repo or tests-repo, and that's not trivial with buildbot).

My weak suggestion would be to put all of these "packaging tests" into a subdirectory of the main tree, and have the buildbot (or whatever) check out trunk, then run one of them. The packaging tests should not feel obligated to use the rest of the source code for anything, but if the test happens to need a trunk checkout, one is nearby. I could be talked out of this, though.

I'm -0. I'll create that repo if you want, but first I'd like to push back on the notion that these tests ought to live outside of the main source tree. > Zooko points out that if the tests live in the main tahoe-lafs repository, then when they are invoked they may incorrectly import the local unpackaged code, or make other dependency mistakes. I think it's easy to avoid that. Our `bin/tahoe` looks in its parent directory for the marker file that indicates it should include `../src` and `../support`, etc. But if we unpack the sdist into a subdirectory, and run the new `bin/tahoe`, it won't look in the original tree for anything. (One counter-example would be if something in the build process wants to know if it's in a git checkout, for which `git` walks all the way to the filesystem root looking for a `.git` directory. I don't think that's a big deal.) More repositories means more places for contributors to look, more divergence between code and tests. Also it raises the buildbot question of which repo's changes should trigger the tests being run (presumably you'd want to trigger on changes in either source-repo or tests-repo, and that's not trivial with buildbot). My weak suggestion would be to put all of these "packaging tests" into a subdirectory of the main tree, and have the buildbot (or whatever) check out trunk, then run one of them. The packaging tests should not feel obligated to use the rest of the source code for anything, but if the test happens to need a trunk checkout, one is nearby. I could be talked out of this, though.

Well, I still feel like it is better to maintain the packaging tests and the Tahoe-LAFS code separately. I don't foresee it being a problem that there is "divergence" between the packaging tests and the Tahoe-LAFS code. Those two things probably oughtn't be changed in tight synchronization with each other anyway!

I've had problems in the past with packaging code accidentally importing the wrong version of a package, and it was very confusing, so I feel nervous about the packaging tests coming with a copy of the code-under-test in a sibling directory. I think it could cause trouble.

I think it's easy to avoid that. Our bin/tahoe looks in its parent directory for the marker file that indicates it should include ../src and ../support, etc. But if we unpack the sdist into a subdirectory, and run the new bin/tahoe, it won't look in the original tree for anything.

I don't think this is easy! I find this stuff very confusing. You can't rely on setting PYTHONPATH, by the time you can edit sys.path it is sometimes too late, you can't rely on editing sys.modules (although I occasionally have to do that). Having your Python code crawl around in your file system and look for magic files in sibling directories, like we do in bin/tahoe is icky and non-standard, even though it has worked so far bin/tahoe's purposes.

In short, if I want some code (the packaging tests) to have control over what specific copy of some other code (the code-under-test) it starts with, then my preferred way of achieving that is:

  1. The test code starts with no extant copies of any version of the other code present on its filesystem.

  2. The test code fetches a specifically chosen version, by tarball-download of a specific URL, or by git fetch of a specific branch, tag, or commit-hash.

Well, I still feel like it is better to maintain the packaging tests and the Tahoe-LAFS code separately. I don't foresee it being a problem that there is "divergence" between the packaging tests and the Tahoe-LAFS code. Those two things probably oughtn't be changed in tight synchronization with each other anyway! I've had problems in the past with packaging code accidentally importing the wrong version of a package, and it was very confusing, so I feel nervous about the packaging tests coming with a copy of the code-under-test in a sibling directory. I think it could cause trouble. > I think it's easy to avoid that. Our bin/tahoe looks in its parent directory for the marker file that indicates it should include ../src and ../support, etc. But if we unpack the sdist into a subdirectory, and run the new bin/tahoe, it won't look in the original tree for anything. I don't think this is easy! I find this stuff very confusing. You can't rely on setting `PYTHONPATH`, by the time you can edit `sys.path` it is sometimes too late, you can't rely on editing `sys.modules` (although I occasionally have to do that). Having your Python code crawl around in your file system and look for magic files in sibling directories, like we do in `bin/tahoe` is icky and non-standard, even though it has worked so far `bin/tahoe`'s purposes. In short, if I want some code (the packaging tests) to have control over what specific copy of some other code (the code-under-test) it starts with, then my preferred way of achieving that is: 1. The test code starts with no extant copies of any version of the other code present on its filesystem. 2. The test code fetches a specifically chosen version, by tarball-download of a specific URL, or by git fetch of a specific branch, tag, or commit-hash.

Replying to zooko:

I'm closing #1248 as a duplicate of this.

Ok, but then let's please have "move test code out of buildbot's master.cfg and into some repo" be part of this (#2049) ticket. That was the point of #1248, and it's not clear thaht it was included in the remit for #2049.

Replying to [zooko](/tahoe-lafs/trac/issues/2049#issuecomment-394702): > I'm closing #1248 as a duplicate of this. Ok, but then let's please have "move test code out of buildbot's master.cfg and into some repo" be part of this (#2049) ticket. That was the point of #1248, and it's not clear thaht it was included in the remit for #2049.

Eh, ok. Repo created at https://github.com/tahoe-lafs/packaging-tests . I+zooko+daira have commit.

Eh, ok. Repo created at <https://github.com/tahoe-lafs/packaging-tests> . I+zooko+daira have commit.
Author

We chatted about next steps in a weekly dev chat just now. I propose the next steps are:

  1. ☑ Review and merge https://github.com/tahoe-lafs/buildbot-config-tahoe/pulls
  2. ☐ Create a local master/slave setup to test changes.
  3. ☐ Create a test runner framework in https://github.com/tahoe-lafs/packaging-tests
  4. ☐ Ensure that the new test framework executes the same tests with the same output reported as the existing production buildbot deployment.
  5. ☐ Swap in this new configuration into the existing build-bot network (-and carefully consider contingency downgrade)
  6. ☐ Verify that the new buildbot operation is functionally equivalent to the current operation
  7. ☐ Close this ticket as resolved

After that, we can iterate on packaging-tests to try to nail down installation issues, using separate tickets.

Edit: Added checkboxes for the tasks and marked the first as complete.

Edit 2014-09-25: Changed a step from "
Move the Tahoe ./misc/build_helpers tests into packaging-tests" to be about non-regression criterion.

Edit 2014-09-25: Inserted a new step: "Create a local master/slave setup to test changes." See comment 25#comment:-1.

We chatted about next steps in a weekly dev chat just now. I propose the next steps are: 1. ☑ Review and merge <https://github.com/tahoe-lafs/buildbot-config-tahoe/pulls> 1. ☐ Create a local master/slave setup to test changes. 1. ☐ Create a test runner framework in <https://github.com/tahoe-lafs/packaging-tests> 1. ☐ Ensure that the new test framework executes the same tests with the same output reported as the existing production buildbot deployment. 1. ☐ Swap in this new configuration into the existing build-bot network (-and carefully consider contingency downgrade) 1. ☐ Verify that the new buildbot operation is functionally equivalent to the current operation 1. ☐ Close this ticket as resolved After that, we can iterate on ``packaging-tests`` to try to nail down installation issues, using separate tickets. **Edit:** Added checkboxes for the tasks and marked the first as complete. **Edit 2014-09-25:** Changed a step from " Move the Tahoe ``./misc/build_helpers`` tests into ``packaging-tests``" to be about non-regression criterion. **Edit 2014-09-25:** Inserted a new step: "Create a local master/slave setup to test changes." See [comment 25](/tahoe-lafs/trac/issues/27961)#[comment:-1](/tahoe-lafs/trac/issues/2049#issuecomment--1).

We've done step 1 from comment:394707.

We've done step 1 from [comment:394707](/tahoe-lafs/trac/issues/2049#issuecomment-394707).
warner was unassigned by zooko 2014-07-08 17:13:46 +00:00
nejucomo was assigned by zooko 2014-07-08 17:13:46 +00:00
Author

Note: I removed the checkboxes in the quotes to avoid state confusion. (I intended to update comment 15 to reflect new changes in addition to adding comments.)

Replying to nejucomo:

We chatted about next steps in a weekly dev chat just now. I propose the next steps are:

  1. Review and merge https://github.com/tahoe-lafs/buildbot-config-tahoe/pulls
  2. Create a test runner framework in https://github.com/tahoe-lafs/packaging-tests

I propose we use twisted trial as "the framework" and run tests with trial $OPTIONS packaging_tests.

  1. Move the Tahoe ./misc/build_helpers tests into packaging-tests

Oh, I should look at these before selecting the framework. Hopefully these are easy to hook into trial tests.

  1. Swap in this new configuration into the existing build-bot network (-and carefully consider contingency downgrade)
  2. Verify that the new buildbot operation is functionally equivalent to the current operation
  3. Close this ticket as resolved

After that, we can iterate on packaging-tests to try to nail down installation issues, using separate tickets.

Edit: Added checkboxes for the tasks and marked the first as complete.

So right now I'm going to examine ./misc/build_helpers and determine if they'd fit into a trial design.

**Note:** I removed the checkboxes in the quotes to avoid state confusion. (I intended to update comment 15 to reflect new changes in addition to adding comments.) Replying to [nejucomo](/tahoe-lafs/trac/issues/2049#issuecomment-394707): > We chatted about next steps in a weekly dev chat just now. I propose the next steps are: > > 1. Review and merge <https://github.com/tahoe-lafs/buildbot-config-tahoe/pulls> > 2. Create a test runner framework in <https://github.com/tahoe-lafs/packaging-tests> I propose we use twisted trial as "the framework" and run tests with ``trial $OPTIONS packaging_tests``. > 3. Move the Tahoe ``./misc/build_helpers`` tests into ``packaging-tests`` Oh, I should look at these before selecting the framework. Hopefully these are easy to hook into trial tests. > 4. Swap in this new configuration into the existing build-bot network (-and carefully consider contingency downgrade) > 5. Verify that the new buildbot operation is functionally equivalent to the current operation > 6. Close this ticket as resolved > > After that, we can iterate on ``packaging-tests`` to try to nail down installation issues, using separate tickets. > > **Edit:** Added checkboxes for the tasks and marked the first as complete. So right now I'm going to examine ``./misc/build_helpers`` and determine if they'd fit into a trial design.
Should nejucomo be given commit access to: <https://github.com/tahoe-lafs/packaging-tests> and/or: <https://github.com/tahoe-lafs/buildbot-config-tahoe> ?

Probably. I don't have admin access to those either.

Probably. I don't have admin access to those either.

Replying to nejucomo:

Task: Define a policy about where packaging tests live, where buildbot configuration lives, then specify that policy on the wiki.

Details:

We'd benefit from "packaging tests" which are different from unittests. The latter target a prepared installation or repository checkout, whereas packaging tests have these distinctions:

Inputs: Packaging tests may target as input:

  • build tests - a fresh repository checkout in order to test creation of distribution formats -- e.g. sdist, linux distro packages, sumo tarballs, etc...
  • installation tests - a locally prepared distribution format -- e.g. sdist, .deb, etc...
  • distribution tests - the network -- e.g. a PyPI package name and http(s) connections to python packaging mirrors; a debian package name and connections to debian repositories; etc...

Staging or Production: We might like to run the same tests against unreleased versions and distinctly against "the live internet".

  • Staging tests might rely on a local PyPI mirror to ensure that if we were to distribute sdists to the real PyPI, then users will probably successfully be able to install them.
  • Production tests rely on the actual distribution that live users use. Failures of these tests let us know when our released packages are unavailable to users, and can help identify why.

Brittleness: sensitivity to transient conditions:

  • Packaging tests start from either a repository clone or an sdist and should behave fairly deterministically without networking.
  • Installation tests start from local packaging files, and should behave deterministically, barring system state issues.
  • Distributions tests necessarily use the internet and will give false positives for transient errors. (Note: Errors due to transient outages are important information! Suppose tahoe-lafs install relies on some.third-party.package.host.example.com and that site goes down. We want to know that people are now unable to install tahoe-lafs through specific channels.)

We may want different packaging tests to live in different places depending on these axes. Some of these tests may not require buildbot, and/or may not be developed or maintained by us at all! For example, tests which verify live PyPI packages may be run by PyPI itself. We should still account for this in an "official policy".

We probably want test infrastructure operators to have some flexibility to only run some categories of tests. For example, a debian test box would not want to run windows installation tests, or some operators may prefer to limit networking and only run non-distribution tests.

Here're some tweaks to the test type taxonomy outlined above.

  1. I think the name "network distribution tests" is easier to understand, perhaps because it's more specific, than "distribution tests". I believe this because when I added the "network " before instances of "distribution test" I found the text easier to understand.

  2. If I Understand Correctly (IIUC) the word "Packaging" which is the first word after the first bullet point in the "Brittleness" section is a substitution error, and should be the word "Build".

  3. It seems to me that "Brittleness" is a criteria, like "Inputs", by which one can categorize test "packaging test" types, whereas "Staging or Production" is a discriminator that applies more agnostically to all tests. Therefore I propose that the description will have a more intuitive flow if the order of the sections: "Brittleness" and "Staging or Production" are swapped. Also it might be nice to provide some other indicator that the "Staging or Production" section is not quite the same kind of section as the other two, e.g. an interposed sentence, or making both "Inputs" and "Brittleness" be subsections of a "Test Type" section.

  4. I propose that we replace the term "Brittleness" with the word "Robustness".

Replying to [nejucomo](/tahoe-lafs/trac/issues/27961): > **Task:** Define a policy about where packaging tests live, where buildbot configuration lives, then specify that policy on the wiki. > > **Details:** > > We'd benefit from "packaging tests" which are different from unittests. The latter target a prepared installation or repository checkout, whereas packaging tests have these distinctions: > > **Inputs:** Packaging tests may target as input: > > * *build tests* - a fresh repository checkout in order to test creation of distribution formats -- *e.g.* `sdist`, `linux distro packages`, sumo tarballs, etc... > * *installation tests* - a locally prepared distribution format -- *e.g.* `sdist`, `.deb`, etc... > * *distribution tests* - the network -- *e.g.* a PyPI package name and `http(s)` connections to python packaging mirrors; a debian package name and connections to debian repositories; etc... > > **Staging or Production**: We might like to run the same tests against unreleased versions and distinctly against "the live internet". > > * *Staging tests* might rely on a local PyPI mirror to ensure that *if we were* to distribute sdists to the real PyPI, *then* users will probably successfully be able to install them. > * *Production tests* rely on the actual distribution that live users use. Failures of these tests let us know when our released packages are unavailable to users, and can help identify why. > > **Brittleness**: sensitivity to transient conditions: > > * Packaging tests start from either a repository clone or an sdist and should behave fairly deterministically without networking. > * Installation tests start from local packaging files, and should behave deterministically, barring system state issues. > * Distributions tests necessarily use the internet and will give false positives for transient errors. (*Note:* Errors due to transient outages are important information! Suppose `tahoe-lafs` install relies on `some.third-party.package.host.example.com` and that site goes down. We want to know that people are now unable to install `tahoe-lafs` through specific channels.) > > > We may want different packaging tests to live in different places depending on these axes. Some of these tests may not require buildbot, and/or may not be developed or maintained by us at all! For example, tests which verify live PyPI packages may be run by PyPI itself. We should still account for this in an "official policy". > > We probably want test infrastructure operators to have some flexibility to only run some categories of tests. For example, a debian test box would not want to run windows installation tests, or some operators may prefer to limit networking and only run non-distribution tests. Here're some tweaks to the test type taxonomy outlined above. 1. I think the name "network distribution tests" is easier to understand, perhaps because it's more specific, than "distribution tests". I believe this because when I added the "network " before instances of "distribution test" I found the text easier to understand. 2. If I Understand Correctly (IIUC) the word "Packaging" which is the first word after the first bullet point in the "Brittleness" section is a substitution error, and should be the word "Build". 3. It seems to me that "Brittleness" is a criteria, like "Inputs", by which one can categorize test "packaging test" types, whereas "Staging or Production" is a discriminator that applies more agnostically to all tests. Therefore I propose that the description will have a more intuitive flow if the order of the sections: "Brittleness" and "Staging or Production" are swapped. Also it might be nice to provide some other indicator that the "Staging or Production" section is not quite the same kind of section as the other two, e.g. an interposed sentence, or making both "Inputs" and "Brittleness" be subsections of a "Test Type" section. 4. I propose that we replace the term "Brittleness" with the word "Robustness".
Author

Replying to Zancas:

Should nejucomo be given commit access to:

https://github.com/tahoe-lafs/packaging-tests

and/or:

https://github.com/tahoe-lafs/buildbot-config-tahoe

?

I'll just do the simple non-blocking github flow: fork and make a pull request. I think I prefer that to having commit access anyway. The main reason I would want commit access is if we frequently block on the existing set of people with access.

Replying to [Zancas](/tahoe-lafs/trac/issues/2049#issuecomment-394712): > Should nejucomo be given commit access to: > > <https://github.com/tahoe-lafs/packaging-tests> > > and/or: > > <https://github.com/tahoe-lafs/buildbot-config-tahoe> > > ? I'll just do the simple non-blocking github flow: fork and make a pull request. I think I prefer that to having commit access anyway. The main reason I would want commit access is if we frequently block on the existing set of people with access.
Author

Replying to [Zancas]comment:21:

...

Zancas and I are chatting in realtime and we both agree that having clear terminology could help avoid confusion.

As an example, in the Inputs section, first bullet, I say "build", but what I means is not what python ./setup.py build does.

In fact, all of this description kind of ignores what python ./setup.py build does, which is kind of a "local compilation and install without creating any package".

Other sources of confusion:

"distribution" - does this mean the process of copying bytes from some "package repository" onto a local system and then installing it? -or- does it mean "linux distro" or does it mean the format of the bytes in a package or what?

"packaging" - Is this the process of converting source code into a package file (tarball, .whl, .deb, .dmg, etc...)? Is it the process of publishing such files to "package repositories"? Is it the process of installing?

I propose we focus on the checklist in /tahoe-lafs/trac/issues/27961#comment:394707 and ignore the description for now. Later we can categorize the different tests we create and create a canonical lexicon.

Replying to [Zancas]comment:21: > ... Zancas and I are chatting in realtime and we both agree that having clear terminology could help avoid confusion. As an example, in the **Inputs** section, first bullet, I say "build", but what I means is *not what* `python ./setup.py build` does. In fact, all of this description kind of ignores what `python ./setup.py build` does, which is kind of a "local compilation and install without creating any package". Other sources of confusion: "distribution" - does this mean the process of copying bytes from some "package repository" onto a local system and then installing it? *-or-* does it mean "linux distro" or does it mean the format of the bytes in a package or what? "packaging" - Is this the process of converting source code into a package file (tarball, ``.whl``, ``.deb``, ``.dmg``, etc...)? Is it the process of publishing such files to "package repositories"? Is it the process of installing? I propose we focus on the checklist in [/tahoe-lafs/trac/issues/27961](/tahoe-lafs/trac/issues/27961)#[comment:394707](/tahoe-lafs/trac/issues/2049#issuecomment-394707) and ignore the description *for now*. Later we can categorize the different tests we create and create a canonical lexicon.
Author

Zancas and I are reading over buildbot-config-tahoe/tahoe/git/master.cfg in order to learn what should appear in packaging-tests.

In my opinion, the master.cfg should be minimal, and I'd like to move some of the operations here into packaging-tests, and here are some examples of why:

  • In master.cfg line 92 there's a conditional on a per-buildslave option do_test_already_have_dep which determines whether or not to run a test. I would rather have two explicitly named tests such as test_tahoe_build_with_preexisting_pycryptopp versus test_tahoe_build_without_preexisting_pyrcryptopp and then configure buildslaves by specifying which tests they run. (In fact, a single buildslave may be able to run both tests which would be handy especially when we have few buildslaves for a given architecture.)

  • In master.cfg line 97 we run ./setup.py build, which precludes tests such as "run pip install . on a git checkout inside of a virtualenv and verify this works".

-etc...

I'm a bit confused though about how buildslave's are or should be configured though. For the short term (for the purposes of this ticket), my goal is to change master.cfg minimally.

edit: I wrote this comment with multiple submissions because I'm paranoid of killing my browser tab when I really mean "delete previous word", ie: ctrl-w. :-/

Zancas and I are reading over [buildbot-config-tahoe/tahoe/git/master.cfg](https://github.com/tahoe-lafs/buildbot-config-tahoe/blob/master/tahoe/git/master.cfg) in order to learn what should appear in [packaging-tests](https://github.com/tahoe-lafs/packaging-tests). In my opinion, the `master.cfg` should be minimal, and I'd like to move some of the operations here into `packaging-tests`, and here are some examples of why: * In [master.cfg line 92](https://github.com/tahoe-lafs/buildbot-config-tahoe/blob/master/tahoe/git/master.cfg#L92) there's a conditional on a per-buildslave option `do_test_already_have_dep` which determines whether or not to run a test. I would rather have two explicitly named tests such as `test_tahoe_build_with_preexisting_pycryptopp` versus `test_tahoe_build_without_preexisting_pyrcryptopp` and then configure buildslaves by specifying which tests they run. (In fact, a single buildslave may be able to run both tests which would be handy especially when we have few buildslaves for a given architecture.) * In [master.cfg line 97](https://github.com/tahoe-lafs/buildbot-config-tahoe/blob/master/tahoe/git/master.cfg#L97) we run `./setup.py build`, which precludes tests such as "run `pip install .` on a git checkout inside of a virtualenv and verify this works". -etc... I'm a bit confused though about how buildslave's are or should be configured though. For the short term (for the purposes of this ticket), my goal is to change `master.cfg` minimally. **edit:** I wrote this comment with multiple submissions because I'm paranoid of killing my browser tab when I really mean "delete previous word", ie: ctrl-w. :-/
Author

Ok, my next goal is to set up a local test buildmaster / buildslave using this config so that I can compare its results to stuff inside https://tahoe-lafs.org/buildbot-tahoe-lafs/ before changing anything.

Note: I edited the checklist in comment 15#comment:394707 to reflect this goal.

Ok, my next goal is to set up a local test buildmaster / buildslave using this config so that I can compare its results to stuff inside <https://tahoe-lafs.org/buildbot-tahoe-lafs/> before changing anything. **Note:** I edited the checklist in [comment 15](/tahoe-lafs/trac/issues/27961)#[comment:394707](/tahoe-lafs/trac/issues/2049#issuecomment-394707) to reflect this goal.

Replying to [nejucomo]comment:22:

Replying to Zancas:

Should nejucomo be given commit access to:

https://github.com/tahoe-lafs/packaging-tests

and/or:

https://github.com/tahoe-lafs/buildbot-config-tahoe

?

I'll just do the simple non-blocking github flow: fork and make a pull request. I think I prefer that to having commit access anyway. The main reason I would want commit access is if we frequently block on the existing set of people with access.

I see no reason why the permissions for those two repos shouldn't be identical to those for tahoe-lafs/tahoe-lafs.

Replying to [nejucomo]comment:22: > Replying to [Zancas](/tahoe-lafs/trac/issues/2049#issuecomment-394712): > > Should nejucomo be given commit access to: > > > > <https://github.com/tahoe-lafs/packaging-tests> > > > > and/or: > > > > <https://github.com/tahoe-lafs/buildbot-config-tahoe> > > > > ? > > I'll just do the simple non-blocking github flow: fork and make a pull request. I think I prefer that to having commit access anyway. The main reason I would want commit access is if we frequently block on the existing set of people with access. I see no reason why the permissions for those two repos shouldn't be identical to those for tahoe-lafs/tahoe-lafs.
Author

Replying to [daira]comment:26:

Replying to [nejucomo]comment:22:

Replying to Zancas:

Should nejucomo be given commit access to:

https://github.com/tahoe-lafs/packaging-tests

and/or:

https://github.com/tahoe-lafs/buildbot-config-tahoe

?

I'll just do the simple non-blocking github flow: fork and make a pull request. I think I prefer that to having commit access anyway. The main reason I would want commit access is if we frequently block on the existing set of people with access.

I see no reason why the permissions for those two repos shouldn't be identical to those for tahoe-lafs/tahoe-lafs.

Agreed.

Replying to [daira]comment:26: > Replying to [nejucomo]comment:22: > > Replying to [Zancas](/tahoe-lafs/trac/issues/2049#issuecomment-394712): > > > Should nejucomo be given commit access to: > > > > > > <https://github.com/tahoe-lafs/packaging-tests> > > > > > > and/or: > > > > > > <https://github.com/tahoe-lafs/buildbot-config-tahoe> > > > > > > ? > > > > I'll just do the simple non-blocking github flow: fork and make a pull request. I think I prefer that to having commit access anyway. The main reason I would want commit access is if we frequently block on the existing set of people with access. > > I see no reason why the permissions for those two repos shouldn't be identical to those for tahoe-lafs/tahoe-lafs. Agreed.
Author

Note, the new packaging tests, in addition to performing all tests as the previous buildbot configuration should additionally test the OSX packaging added in #182.

Ticket #2303 is about ensuring a buildslave will run this new test.

Note, the new packaging tests, in addition to performing all tests as the previous buildbot configuration should additionally test the OSX packaging added in #182. Ticket #2303 is about ensuring a buildslave will run this new test.
Author

The plan is to add one or more new Builders for packaging tests and not modify existing builders.

The plan is to add one or more new Builders for packaging tests and not modify existing builders.
Author

In a meeting now, we're verbally deciding to bump this out of the OpenITP packaging grant. Instead we will add new packaging tests into tahoe-lafs ./misc/ somewhere and modify the existing buildbot master.cfg for tahoe directly for those tests.

In a meeting now, we're verbally deciding to bump this out of the OpenITP packaging grant. Instead we will add new packaging tests into tahoe-lafs ``./misc/`` somewhere and modify the existing buildbot ``master.cfg`` for tahoe directly for those tests.
Author

Note, I've removed openitp-packaging keyword to reflect our decision.

Note, I've removed ``openitp-packaging`` keyword to reflect our decision.

Ticket retargeted after milestone closed

Ticket retargeted after milestone closed
meejah modified the milestone from soon (release n/a) to soon 2021-03-30 18:41:12 +00:00
Sign in to join this conversation.
No labels
c/code
c/code-dirnodes
c/code-encoding
c/code-frontend
c/code-frontend-cli
c/code-frontend-ftp-sftp
c/code-frontend-magic-folder
c/code-frontend-web
c/code-mutable
c/code-network
c/code-nodeadmin
c/code-peerselection
c/code-storage
c/contrib
c/dev-infrastructure
c/docs
c/operational
c/packaging
c/unknown
c/website
kw:2pc
kw:410
kw:9p
kw:ActivePerl
kw:AttributeError
kw:DataUnavailable
kw:DeadReferenceError
kw:DoS
kw:FileZilla
kw:GetLastError
kw:IFinishableConsumer
kw:K
kw:LeastAuthority
kw:Makefile
kw:RIStorageServer
kw:StringIO
kw:UncoordinatedWriteError
kw:about
kw:access
kw:access-control
kw:accessibility
kw:accounting
kw:accounting-crawler
kw:add-only
kw:aes
kw:aesthetics
kw:alias
kw:aliases
kw:aliens
kw:allmydata
kw:amazon
kw:ambient
kw:annotations
kw:anonymity
kw:anonymous
kw:anti-censorship
kw:api_auth_token
kw:appearance
kw:appname
kw:apport
kw:archive
kw:archlinux
kw:argparse
kw:arm
kw:assertion
kw:attachment
kw:auth
kw:authentication
kw:automation
kw:avahi
kw:availability
kw:aws
kw:azure
kw:backend
kw:backoff
kw:backup
kw:backupdb
kw:backward-compatibility
kw:bandwidth
kw:basedir
kw:bayes
kw:bbfreeze
kw:beta
kw:binaries
kw:binutils
kw:bitcoin
kw:bitrot
kw:blacklist
kw:blocker
kw:blocks-cloud-deployment
kw:blocks-cloud-merge
kw:blocks-magic-folder-merge
kw:blocks-merge
kw:blocks-raic
kw:blocks-release
kw:blog
kw:bom
kw:bonjour
kw:branch
kw:branding
kw:breadcrumbs
kw:brians-opinion-needed
kw:browser
kw:bsd
kw:build
kw:build-helpers
kw:buildbot
kw:builders
kw:buildslave
kw:buildslaves
kw:cache
kw:cap
kw:capleak
kw:captcha
kw:cast
kw:centos
kw:cffi
kw:chacha
kw:charset
kw:check
kw:checker
kw:chroot
kw:ci
kw:clean
kw:cleanup
kw:cli
kw:cloud
kw:cloud-backend
kw:cmdline
kw:code
kw:code-checks
kw:coding-standards
kw:coding-tools
kw:coding_tools
kw:collection
kw:compatibility
kw:completion
kw:compression
kw:confidentiality
kw:config
kw:configuration
kw:configuration.txt
kw:conflict
kw:connection
kw:connectivity
kw:consistency
kw:content
kw:control
kw:control.furl
kw:convergence
kw:coordination
kw:copyright
kw:corruption
kw:cors
kw:cost
kw:coverage
kw:coveralls
kw:coveralls.io
kw:cpu-watcher
kw:cpyext
kw:crash
kw:crawler
kw:crawlers
kw:create-container
kw:cruft
kw:crypto
kw:cryptography
kw:cryptography-lib
kw:cryptopp
kw:csp
kw:curl
kw:cutoff-date
kw:cycle
kw:cygwin
kw:d3
kw:daemon
kw:darcs
kw:darcsver
kw:database
kw:dataloss
kw:db
kw:dead-code
kw:deb
kw:debian
kw:debug
kw:deep-check
kw:defaults
kw:deferred
kw:delete
kw:deletion
kw:denial-of-service
kw:dependency
kw:deployment
kw:deprecation
kw:desert-island
kw:desert-island-build
kw:design
kw:design-review-needed
kw:detection
kw:dev-infrastructure
kw:devpay
kw:directory
kw:directory-page
kw:dirnode
kw:dirnodes
kw:disconnect
kw:discovery
kw:disk
kw:disk-backend
kw:distribute
kw:distutils
kw:dns
kw:do_http
kw:doc-needed
kw:docker
kw:docs
kw:docs-needed
kw:dokan
kw:dos
kw:download
kw:downloader
kw:dragonfly
kw:drop-upload
kw:duplicity
kw:dusty
kw:earth-dragon
kw:easy
kw:ec2
kw:ecdsa
kw:ed25519
kw:egg-needed
kw:eggs
kw:eliot
kw:email
kw:empty
kw:encoding
kw:endpoint
kw:enterprise
kw:enum34
kw:environment
kw:erasure
kw:erasure-coding
kw:error
kw:escaping
kw:etag
kw:etch
kw:evangelism
kw:eventual
kw:example
kw:excess-authority
kw:exec
kw:exocet
kw:expiration
kw:extensibility
kw:extension
kw:failure
kw:fedora
kw:ffp
kw:fhs
kw:figleaf
kw:file
kw:file-descriptor
kw:filename
kw:filesystem
kw:fileutil
kw:fips
kw:firewall
kw:first
kw:floatingpoint
kw:flog
kw:foolscap
kw:forward-compatibility
kw:forward-secrecy
kw:forwarding
kw:free
kw:freebsd
kw:frontend
kw:fsevents
kw:ftp
kw:ftpd
kw:full
kw:furl
kw:fuse
kw:garbage
kw:garbage-collection
kw:gateway
kw:gatherer
kw:gc
kw:gcc
kw:gentoo
kw:get
kw:git
kw:git-annex
kw:github
kw:glacier
kw:globalcaps
kw:glossary
kw:google-cloud-storage
kw:google-drive-backend
kw:gossip
kw:governance
kw:grid
kw:grid-manager
kw:gridid
kw:gridsync
kw:grsec
kw:gsoc
kw:gvfs
kw:hackfest
kw:hacktahoe
kw:hang
kw:hardlink
kw:heartbleed
kw:heisenbug
kw:help
kw:helper
kw:hint
kw:hooks
kw:how
kw:how-to
kw:howto
kw:hp
kw:hp-cloud
kw:html
kw:http
kw:https
kw:i18n
kw:i2p
kw:i2p-collab
kw:illustration
kw:image
kw:immutable
kw:impressions
kw:incentives
kw:incident
kw:init
kw:inlineCallbacks
kw:inotify
kw:install
kw:installer
kw:integration
kw:integration-test
kw:integrity
kw:interactive
kw:interface
kw:interfaces
kw:interoperability
kw:interstellar-exploration
kw:introducer
kw:introduction
kw:iphone
kw:ipkg
kw:iputil
kw:ipv6
kw:irc
kw:jail
kw:javascript
kw:joke
kw:jquery
kw:json
kw:jsui
kw:junk
kw:key-value-store
kw:kfreebsd
kw:known-issue
kw:konqueror
kw:kpreid
kw:kvm
kw:l10n
kw:lae
kw:large
kw:latency
kw:leak
kw:leasedb
kw:leases
kw:libgmp
kw:license
kw:licenss
kw:linecount
kw:link
kw:linux
kw:lit
kw:localhost
kw:location
kw:locking
kw:logging
kw:logo
kw:loopback
kw:lucid
kw:mac
kw:macintosh
kw:magic-folder
kw:manhole
kw:manifest
kw:manual-test-needed
kw:map
kw:mapupdate
kw:max_space
kw:mdmf
kw:memcheck
kw:memory
kw:memory-leak
kw:mesh
kw:metadata
kw:meter
kw:migration
kw:mime
kw:mingw
kw:minimal
kw:misc
kw:miscapture
kw:mlp
kw:mock
kw:more-info-needed
kw:mountain-lion
kw:move
kw:multi-users
kw:multiple
kw:multiuser-gateway
kw:munin
kw:music
kw:mutability
kw:mutable
kw:mystery
kw:names
kw:naming
kw:nas
kw:navigation
kw:needs-review
kw:needs-spawn
kw:netbsd
kw:network
kw:nevow
kw:new-user
kw:newcaps
kw:news
kw:news-done
kw:news-needed
kw:newsletter
kw:newurls
kw:nfc
kw:nginx
kw:nixos
kw:no-clobber
kw:node
kw:node-url
kw:notification
kw:notifyOnDisconnect
kw:nsa310
kw:nsa320
kw:nsa325
kw:numpy
kw:objects
kw:old
kw:openbsd
kw:openitp-packaging
kw:openssl
kw:openstack
kw:opensuse
kw:operation-helpers
kw:operational
kw:operations
kw:ophandle
kw:ophandles
kw:ops
kw:optimization
kw:optional
kw:options
kw:organization
kw:os
kw:os.abort
kw:ostrom
kw:osx
kw:osxfuse
kw:otf-magic-folder-objective1
kw:otf-magic-folder-objective2
kw:otf-magic-folder-objective3
kw:otf-magic-folder-objective4
kw:otf-magic-folder-objective5
kw:otf-magic-folder-objective6
kw:p2p
kw:packaging
kw:partial
kw:password
kw:path
kw:paths
kw:pause
kw:peer-selection
kw:performance
kw:permalink
kw:permissions
kw:persistence
kw:phone
kw:pickle
kw:pip
kw:pipermail
kw:pkg_resources
kw:placement
kw:planning
kw:policy
kw:port
kw:portability
kw:portal
kw:posthook
kw:pratchett
kw:preformance
kw:preservation
kw:privacy
kw:process
kw:profile
kw:profiling
kw:progress
kw:proxy
kw:publish
kw:pyOpenSSL
kw:pyasn1
kw:pycparser
kw:pycrypto
kw:pycrypto-lib
kw:pycryptopp
kw:pyfilesystem
kw:pyflakes
kw:pylint
kw:pypi
kw:pypy
kw:pysqlite
kw:python
kw:python3
kw:pythonpath
kw:pyutil
kw:pywin32
kw:quickstart
kw:quiet
kw:quotas
kw:quoting
kw:raic
kw:rainhill
kw:random
kw:random-access
kw:range
kw:raspberry-pi
kw:reactor
kw:readonly
kw:rebalancing
kw:recovery
kw:recursive
kw:redhat
kw:redirect
kw:redressing
kw:refactor
kw:referer
kw:referrer
kw:regression
kw:rekey
kw:relay
kw:release
kw:release-blocker
kw:reliability
kw:relnotes
kw:remote
kw:removable
kw:removable-disk
kw:rename
kw:renew
kw:repair
kw:replace
kw:report
kw:repository
kw:research
kw:reserved_space
kw:response-needed
kw:response-time
kw:restore
kw:retrieve
kw:retry
kw:review
kw:review-needed
kw:reviewed
kw:revocation
kw:roadmap
kw:rollback
kw:rpm
kw:rsa
kw:rss
kw:rst
kw:rsync
kw:rusty
kw:s3
kw:s3-backend
kw:s3-frontend
kw:s4
kw:same-origin
kw:sandbox
kw:scalability
kw:scaling
kw:scheduling
kw:schema
kw:scheme
kw:scp
kw:scripts
kw:sdist
kw:sdmf
kw:security
kw:self-contained
kw:server
kw:servermap
kw:servers-of-happiness
kw:service
kw:setup
kw:setup.py
kw:setup_requires
kw:setuptools
kw:setuptools_darcs
kw:sftp
kw:shared
kw:shareset
kw:shell
kw:signals
kw:simultaneous
kw:six
kw:size
kw:slackware
kw:slashes
kw:smb
kw:sneakernet
kw:snowleopard
kw:socket
kw:solaris
kw:space
kw:space-efficiency
kw:spam
kw:spec
kw:speed
kw:sqlite
kw:ssh
kw:ssh-keygen
kw:sshfs
kw:ssl
kw:stability
kw:standards
kw:start
kw:startup
kw:static
kw:static-analysis
kw:statistics
kw:stats
kw:stats_gatherer
kw:status
kw:stdeb
kw:storage
kw:streaming
kw:strports
kw:style
kw:stylesheet
kw:subprocess
kw:sumo
kw:survey
kw:svg
kw:symlink
kw:synchronous
kw:tac
kw:tahoe-*
kw:tahoe-add-alias
kw:tahoe-admin
kw:tahoe-archive
kw:tahoe-backup
kw:tahoe-check
kw:tahoe-cp
kw:tahoe-create-alias
kw:tahoe-create-introducer
kw:tahoe-debug
kw:tahoe-deep-check
kw:tahoe-deepcheck
kw:tahoe-lafs-trac-stream
kw:tahoe-list-aliases
kw:tahoe-ls
kw:tahoe-magic-folder
kw:tahoe-manifest
kw:tahoe-mkdir
kw:tahoe-mount
kw:tahoe-mv
kw:tahoe-put
kw:tahoe-restart
kw:tahoe-rm
kw:tahoe-run
kw:tahoe-start
kw:tahoe-stats
kw:tahoe-unlink
kw:tahoe-webopen
kw:tahoe.css
kw:tahoe_files
kw:tahoewapi
kw:tarball
kw:tarballs
kw:tempfile
kw:templates
kw:terminology
kw:test
kw:test-and-set
kw:test-from-egg
kw:test-needed
kw:testgrid
kw:testing
kw:tests
kw:throttling
kw:ticket999-s3-backend
kw:tiddly
kw:time
kw:timeout
kw:timing
kw:to
kw:to-be-closed-on-2011-08-01
kw:tor
kw:tor-protocol
kw:torsocks
kw:tox
kw:trac
kw:transparency
kw:travis
kw:travis-ci
kw:trial
kw:trickle
kw:trivial
kw:truckee
kw:tub
kw:tub.location
kw:twine
kw:twistd
kw:twistd.log
kw:twisted
kw:twisted-14
kw:twisted-trial
kw:twitter
kw:twn
kw:txaws
kw:type
kw:typeerror
kw:ubuntu
kw:ucwe
kw:ueb
kw:ui
kw:unclean
kw:uncoordinated-writes
kw:undeletable
kw:unfinished-business
kw:unhandled-error
kw:unhappy
kw:unicode
kw:unit
kw:unix
kw:unlink
kw:update
kw:upgrade
kw:upload
kw:upload-helper
kw:uri
kw:url
kw:usability
kw:use-case
kw:utf-8
kw:util
kw:uwsgi
kw:ux
kw:validation
kw:variables
kw:vdrive
kw:verify
kw:verlib
kw:version
kw:versioning
kw:versions
kw:video
kw:virtualbox
kw:virtualenv
kw:vista
kw:visualization
kw:visualizer
kw:vm
kw:volunteergrid2
kw:volunteers
kw:vpn
kw:wapi
kw:warners-opinion-needed
kw:warning
kw:weapi
kw:web
kw:web.port
kw:webapi
kw:webdav
kw:webdrive
kw:webport
kw:websec
kw:website
kw:websocket
kw:welcome
kw:welcome-page
kw:welcomepage
kw:wiki
kw:win32
kw:win64
kw:windows
kw:windows-related
kw:winscp
kw:workaround
kw:world-domination
kw:wrapper
kw:write-enabler
kw:wui
kw:x86
kw:x86-64
kw:xhtml
kw:xml
kw:xss
kw:zbase32
kw:zetuptoolz
kw:zfec
kw:zookos-opinion-needed
kw:zope
kw:zope.interface
p/blocker
p/critical
p/major
p/minor
p/normal
p/supercritical
p/trivial
r/cannot reproduce
r/duplicate
r/fixed
r/invalid
r/somebody else's problem
r/was already fixed
r/wontfix
r/worksforme
t/defect
t/enhancement
t/task
v/0.2.0
v/0.3.0
v/0.4.0
v/0.5.0
v/0.5.1
v/0.6.0
v/0.6.1
v/0.7.0
v/0.8.0
v/0.9.0
v/1.0.0
v/1.1.0
v/1.10.0
v/1.10.1
v/1.10.2
v/1.10a2
v/1.11.0
v/1.12.0
v/1.12.1
v/1.13.0
v/1.14.0
v/1.15.0
v/1.15.1
v/1.2.0
v/1.3.0
v/1.4.1
v/1.5.0
v/1.6.0
v/1.6.1
v/1.7.0
v/1.7.1
v/1.7β
v/1.8.0
v/1.8.1
v/1.8.2
v/1.8.3
v/1.8β
v/1.9.0
v/1.9.0-s3branch
v/1.9.0a1
v/1.9.0a2
v/1.9.0b1
v/1.9.1
v/1.9.2
v/1.9.2a1
v/cloud-branch
v/unknown
No milestone
No project
No assignees
6 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: tahoe-lafs/trac#2049
No description provided.