-
Notifications
You must be signed in to change notification settings - Fork 91
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
make environment/dependencies/initial_context to accept callable
- Loading branch information
Showing
25 changed files
with
2,421 additions
and
1,649 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,64 @@ | ||
""" | ||
This demonstrates one possible way of implementing of EnvBuilder class. | ||
""" | ||
import functools | ||
|
||
from testplan.common.utils.context import context | ||
from testplan.testing.multitest.driver.tcp import TCPClient, TCPServer | ||
|
||
|
||
class EnvBuilder: | ||
def __init__(self, env_name: str, drivers: list): | ||
""" | ||
:param env_name: name of this env builder | ||
:param drivers: list of drivers to be created | ||
""" | ||
self.env_name = env_name | ||
self.drivers = drivers | ||
self.client_auto_connect = False if len(self.drivers) == 3 else True | ||
self._client1 = None | ||
self._client2 = None | ||
self._server1 = None | ||
|
||
def build_env(self): | ||
return [getattr(self, driver_name) for driver_name in self.drivers] | ||
|
||
def init_ctx(self): | ||
return {"env_name": self.env_name} | ||
|
||
def build_deps(self): | ||
if len(self.drivers) == 2: | ||
return {self.server1: self.client1} | ||
elif len(self.drivers) == 3: | ||
return {self.server1: (self.client1, self.client2)} | ||
|
||
@property | ||
# @functools.cached_property | ||
def client1(self): | ||
if not self._client1: | ||
self._client1 = TCPClient( | ||
name="client1", | ||
host=context("server1", "{{host}}"), | ||
port=context("server1", "{{port}}"), | ||
connect_at_start=self.client_auto_connect, | ||
) | ||
return self._client1 | ||
|
||
@property | ||
# @functools.cached_property | ||
def client2(self): | ||
if not self._client2: | ||
self._client2 = TCPClient( | ||
name="client2", | ||
host=context("server1", "{{host}}"), | ||
port=context("server1", "{{port}}"), | ||
connect_at_start=self.client_auto_connect, | ||
) | ||
return self._client2 | ||
|
||
@property | ||
# @functools.cached_property | ||
def server1(self): | ||
if not self._server1: | ||
self._server1 = TCPServer(name="server1") | ||
return self._server1 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,48 @@ | ||
from testplan.testing.multitest import testsuite, testcase | ||
|
||
|
||
@testsuite | ||
class TestOneClient: | ||
def setup(self, env, result): | ||
result.log(f"Testing with [{env.env_name}] env") | ||
env.server1.accept_connection() | ||
|
||
@testcase | ||
def test_send_and_receive_msg(self, env, result): | ||
env.client1.send_text("hi server") | ||
result.equal("hi server", env.server1.receive_text()) | ||
|
||
env.server1.send_text("hi client") | ||
result.equal("hi client", env.client1.receive_text()) | ||
|
||
|
||
@testsuite | ||
class TestTwoClients: | ||
def setup(self, env, result): | ||
result.log(f"Testing with [{env.env_name}] env") | ||
|
||
env.client1.connect() | ||
self.conn1 = env.server1.accept_connection() | ||
|
||
env.client2.connect() | ||
self.conn2 = env.server1.accept_connection() | ||
|
||
@testcase | ||
def test_send_and_receive_msg(self, env, result): | ||
env.client1.send_text("hi server from client1") | ||
env.client2.send_text("hi server from client2") | ||
|
||
result.equal( | ||
"hi server from client1", | ||
env.server1.receive_text(conn_idx=self.conn1), | ||
) | ||
result.equal( | ||
"hi server from client2", | ||
env.server1.receive_text(conn_idx=self.conn2), | ||
) | ||
|
||
env.server1.send_text("hi client1", conn_idx=self.conn1) | ||
env.server1.send_text("hi client2", conn_idx=self.conn2) | ||
|
||
result.equal("hi client1", env.client1.receive_text()) | ||
result.equal("hi client2", env.client2.receive_text()) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,44 @@ | ||
#!/usr/bin/env python | ||
""" | ||
This example demonstrates usage of callable object to construct environment, | ||
intial_context and dependencies for a multitest at runtime. | ||
""" | ||
|
||
import sys | ||
|
||
from testplan import test_plan | ||
from testplan.testing.multitest import MultiTest | ||
from env_builder import EnvBuilder | ||
from suites import TestOneClient, TestTwoClients | ||
|
||
|
||
@test_plan(name="EnvBuilderExample") | ||
def main(plan): | ||
|
||
env_builder1 = EnvBuilder("One Client", ["client1", "server1"]) | ||
env_builder2 = EnvBuilder("Two Clients", ["client1", "client2", "server1"]) | ||
plan.add( | ||
MultiTest( | ||
name="TestOneClient", | ||
suites=[TestOneClient()], | ||
environment=env_builder1.build_env, | ||
dependencies=env_builder1.build_deps, | ||
initial_context=env_builder1.init_ctx, | ||
) | ||
) | ||
|
||
plan.add( | ||
MultiTest( | ||
name="TestTwoClients", | ||
suites=[TestTwoClients()], | ||
environment=env_builder2.build_env, | ||
dependencies=env_builder2.build_deps, | ||
initial_context=env_builder2.init_ctx, | ||
) | ||
) | ||
|
||
|
||
if __name__ == "__main__": | ||
res = main() | ||
print("Exiting code: {}".format(res.exit_code)) | ||
sys.exit(res.exit_code) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.