Managing Bugs¶
BugZoo packages historical software versions as lightweight, immutable
Docker container images. The bugs registered with
a BugZoo server may be accessed via the the BugZoo client’s bugs
property, which exposes a BugManager
. Each bug is represented by an
immutable Bug
instance. The []
operator may be used to fetch
a Bug
instance for a bug with a given name.
The names of all of the bugs registered with the server can be accessed by
iterating over the BugManager
, as shown below.
for name in client_bugzoo.bugs:
bug = client_bugzoo.bugs[name] # type: Bug
The BugManager
can be used to build Docker images for bugs according
to the instructions provided in the bug’s manifest:
bug = client_bugzoo.bugs['manybugs:python:69223-69224']
client_bugzoo.bugs.build(bug)
Alternatively, prebuilt images may be downloaded from DockerHub via the
download
method:
client_bugzoo.bugs.download(bug)
The BugManager
may also be used to instruct the BugZoo server to
uploaded the Docker image for a given scenario to DockerHub:
client_bugzoo.bugs.upload(bug)
Docker images may be removed from the server by using the uninstall
method:
client_bugzoo.bugs.uninstall(bug)
The is_installed
method may be used to determine whether the Docker
image for a given bug has been installed onto the server:
if client_bugzoo.bugs.is_installed(bug):
print("the image is installed! :-)")
else:
print("the image is not installed :'(")
The BugManager
may also be used to dynamically register ephemeral
Bug
descriptions. Once the server is closed, these descriptions will
be destroyed. In general, we suggest that users register bugs with the server
via the command-line interface. However, there are cases where a dynamic
bug registration is preferable, such as mutation testing, where a new
Bug
instance can be created for every mutation.
bug = Bug(name="mytemporarybug", ...)
client_bugzoo.bugs.register(bug)
Bugs may also be dynamically deregistered via the del
operator, as
shown below. Note that the del
operator will not permanently remove
bugs that are associated with a source (i.e., bugs that have been added via
the command line). In the case of such bugs, the del
operator will
hide their existence for the remaining lifetime of the server.
del client_bugzoo.bugs["mytemporarybug"]
API Reference¶
-
class
Bug
[source]¶ Bugs provide an immutable snapshot of a software system at a given point in time, allowing it to be empirically studied and inspected in a transparent and reproducible manner.
-
harness
→ TestSuite¶
-
-
class
BugManager
[source]¶ Provides access to the historical bugs that are registered with the server. Can be used to install, download, and uninstall registered bugs, or to dynamically register new bugs with the server.
-
__getitem__
(name: str) → bugzoo.core.bug.Bug[source]¶ Retrieves the bug registered under a given name.
- Raises
KeyError – if no bug is found with the given name.
-
__iter__
() → Iterator[str][source]¶ Returns an iterator over the names of the bugs registered with the server.
-
is_installed
(bug: bugzoo.core.bug.Bug) → bool[source]¶ Determines whether the Docker image for a given bug has been installed on the server.
-
build
(bug: bugzoo.core.bug.Bug)[source]¶ Instructs the server to build the Docker image associated with a given bug.
-
download
(bug: bugzoo.core.bug.Bug) → bool[source]¶ Instructs the server to download the Docker image associated with a given bug from DockerHub.
-
uninstall
(bug: bugzoo.core.bug.Bug) → bool[source]¶ Uninstalls the Docker image associated with a given bug.
-
upload
(bug: bugzoo.core.bug.Bug) → bool[source]¶ Instructs the server to upload the Docker image associated with a given bug to DockerHub.
-
register
(bug: bugzoo.core.bug.Bug) → None[source]¶ Dynamically registers a given bug with the server. Note that the registration will not persist beyond the lifetime of the server. (I.e., when the server is closed, the bug will be deregistered.)
- Raises
BugAlreadyExists – if there is already a bug registered on the server under the same name as this bug.
-