Skip to content

Commit

Permalink
use expect_without_traceback in test
Browse files Browse the repository at this point in the history
I have extended my test to use `expect_without_traceback`. This means that I swapped out each
`expect` instance with that function, and in doing so, noticed that I needed to watch for `\r` since
we are using inquirer and click which seemingly terminate lines with `\r` as opposed to `\n`.

I also decided to use a short timeout to give the program a chance to generate a Traceback. If a
Traceback is not found within 2 seconds, I then move on to check if we found our expected string and
return that information as a bool.

I also promoted the bitcoin "slug" string to an instance attribute. I also "demoted" the `sut` from an
instance attribute to simply a variable.
  • Loading branch information
mplsgrant committed Oct 17, 2024
1 parent 94a8429 commit e0373c8
Showing 1 changed file with 55 additions and 47 deletions.
102 changes: 55 additions & 47 deletions test/namespace_admin_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,8 @@ def __init__(self):
self.blue_users = ["carol-warnettest", "default", "mallory-warnettest"]
self.red_users = ["alice-warnettest", self.bob_user, "default"]

self.bitcoin_version_slug = "Bitcoin Core version v27.0.0"

def run_test(self):
try:
os.chdir(self.tmpdir)
Expand Down Expand Up @@ -182,60 +184,66 @@ def bob_runs_scenario_tests(self):
def bob_checks_logs(self):
assert self.this_is_the_current_context(self.bob_context)
self.log.info("Bob will check the logs")
bitcoin_version_slug = "Bitcoin Core version v27.0.0"
self.sut = pexpect.spawn("warnet logs", maxread=4096 * 10)
self.sut.expect("Please choose a pod", timeout=10)
self.sut.sendline("")
self.sut.expect(bitcoin_version_slug, timeout=10)
self.sut.close()
self.sut = pexpect.spawn(f"warnet logs --namespace {self.red_namespace}", maxread=4096 * 10)
self.sut.expect("Please choose a pod", timeout=10)
self.sut.sendline("")
self.sut.expect(bitcoin_version_slug, timeout=10)
self.sut.close()
self.sut = pexpect.spawn("warnet logs tank-0008", maxread=4096 * 10)
self.sut.expect(bitcoin_version_slug, timeout=10)
self.sut.close()
self.sut = pexpect.spawn(

sut = pexpect.spawn("warnet logs", maxread=4096 * 10)
assert expect_without_traceback("Please choose a pod", sut)
sut.sendline("")
assert expect_without_traceback(self.bitcoin_version_slug, sut)
sut.close()

sut = pexpect.spawn(f"warnet logs --namespace {self.red_namespace}", maxread=4096 * 10)
assert expect_without_traceback("Please choose a pod", sut)
sut.sendline("")
assert expect_without_traceback(self.bitcoin_version_slug, sut)
sut.close()

sut = pexpect.spawn("warnet logs tank-0008", maxread=4096 * 10)
assert expect_without_traceback(self.bitcoin_version_slug, sut)
sut.close()

sut = pexpect.spawn(
f"warnet logs tank-0008 --namespace {self.red_namespace}", maxread=4096 * 10
)
self.sut.expect(bitcoin_version_slug, timeout=10)
self.sut.close()
self.sut = pexpect.spawn("warnet logs this_does_not_exist", maxread=4096 * 10)
assert expect_without_traceback(
"Could not find pod in any namespaces", self.sut, timeout=10
)
self.sut.close()
assert expect_without_traceback(self.bitcoin_version_slug, sut)
sut.close()

sut = pexpect.spawn("warnet logs this_does_not_exist", maxread=4096 * 10)
assert expect_without_traceback("Could not find pod in any namespaces", sut)
sut.close()

self.log.info("Bob has checked the logs")
assert self.this_is_the_current_context(self.bob_context)

def admin_checks_logs(self):
assert self.this_is_the_current_context(self.initial_context)
self.log.info("The admin will check the logs")
bitcoin_version_slug = "Bitcoin Core version v27.0.0"
self.sut = pexpect.spawn("warnet logs", maxread=4096 * 10)
self.sut.expect("Please choose a pod", timeout=10)
self.sut.sendline("")
self.sut.expect(bitcoin_version_slug, timeout=10)
self.sut.close()
self.sut = pexpect.spawn(f"warnet logs --namespace {self.red_namespace}", maxread=4096 * 10)
self.sut.expect("Please choose a pod", timeout=10)
self.sut.sendline("")
self.sut.expect(bitcoin_version_slug, timeout=10)
self.sut.close()
self.sut = pexpect.spawn("warnet logs tank-0008", maxread=4096 * 10)
self.sut.expect("The pod 'tank-0008' is found in these namespaces", timeout=10)
self.sut.close()
self.sut = pexpect.spawn(

sut = pexpect.spawn("warnet logs", maxread=4096 * 10)
assert expect_without_traceback("Please choose a pod", sut)
sut.sendline("")
assert expect_without_traceback(self.bitcoin_version_slug, sut)
sut.close()

sut = pexpect.spawn(f"warnet logs --namespace {self.red_namespace}", maxread=4096 * 10)
assert expect_without_traceback("Please choose a pod", sut)
sut.sendline("")
assert expect_without_traceback(self.bitcoin_version_slug, sut)
sut.close()

sut = pexpect.spawn("warnet logs tank-0008", maxread=4096 * 10)
assert expect_without_traceback("The pod 'tank-0008' is found in these namespaces", sut)
sut.close()

sut = pexpect.spawn(
f"warnet logs tank-0008 --namespace {self.red_namespace}", maxread=4096 * 10
)
self.sut.expect(bitcoin_version_slug, timeout=10)
self.sut.close()
self.sut = pexpect.spawn("warnet logs this_does_not_exist", maxread=4096 * 10)
assert expect_without_traceback(
"Could not find pod in any namespaces", self.sut, timeout=10
)
self.sut.close()
assert expect_without_traceback(self.bitcoin_version_slug, sut)
sut.close()

sut = pexpect.spawn("warnet logs this_does_not_exist", maxread=4096 * 10)
assert expect_without_traceback("Could not find pod in any namespaces", sut)
sut.close()

self.log.info("The admin has checked the logs")
assert self.this_is_the_current_context(self.initial_context)

Expand All @@ -260,17 +268,17 @@ class StackTraceFoundException(Exception):
pass


def expect_without_traceback(expectation: str, sut: pexpect.spawn, timeout: int = 10) -> bool:
def expect_without_traceback(expectation: str, sut: pexpect.spawn, timeout: int = 2) -> bool:
expectation_found = False
while True:
try:
sut.expect("\n", timeout=timeout)
sut.expect(["\r", "\n"], timeout=timeout) # inquirer uses \r
line = sut.before.decode("utf-8")
if "Traceback (" in line:
raise StackTraceFoundException
if expectation in line:
expectation_found = True
except pexpect.exceptions.EOF:
except (pexpect.exceptions.EOF, pexpect.exceptions.TIMEOUT):
break
return expectation_found

Expand Down

0 comments on commit e0373c8

Please sign in to comment.