def sync_multi_level_success(self): missing_key = '/app/dev/thing/ci-test2/app/ci-test/v1/config12' delete = DeleteAction(extra_args=self.extra_args) delete.delete(missing_key) put = PutAction(extra_args=self.extra_args) put.add('/app/dev/thing/ci-test2/config9', DELETE_ME_VALUE, desc='desc', add_more=True) put.add('/app/dev/thing/ci-test2/config11', DELETE_ME_VALUE, desc='desc', add_more=True) put.add('/shared/jordan/testrepl', DELETE_ME_VALUE, desc='desc', add_more=True, delete_first=False) put.add('/shared/jordan/testrepl2', DELETE_ME_VALUE, desc='desc', add_more=True, delete_first=False) put.add('/shared/jordan/testrepl3', DELETE_ME_VALUE, desc='desc', add_more=True, delete_first=False) put.add('/shared/jordan/testrepl4', DELETE_ME_VALUE, desc='desc', add_more=False, delete_first=False) print(f"Testing: {CLI_NAME} config {sync.name} --env {DEFAULT_ENV} " f"--config figcli/test/assets/success/multi-level-ns.json") child = TestUtils.spawn(f'{CLI_NAME} config {sync.name} --env {DEFAULT_ENV} ' f'--config figcli/test/assets/success/multi-level-ns.json --skip-upgrade' f' {self.extra_args}', timeout=45) child.expect(f'.*Please input a value for.*{missing_key}.*') child.sendline(DELETE_ME_VALUE) child.expect('.*optional description:.*') child.sendline('desc') child.expect('.*value a secret.*') child.sendline('n') child.expect('.*Sync completed with no errors.*')
def run(self): self.step(f"Preparing get by adding: {param_1}") put = PutAction(extra_args=self.extra_args) put.add(param_1, param_1_val, param_1_desc, add_more=False) self.step(f"Testing GET for {param_1}") self.get(param_1, param_1_val, get_more=False) self.step(f"Cleaning up: {param_1}") delete = DeleteAction(extra_args=self.extra_args) delete.delete(param_1, check_delete=True, delete_another=False)
def prep_sync(self): put = PutAction(extra_args=self.extra_args) put.add('/app/ci-test/v1/config9', DELETE_ME_VALUE, desc='desc', add_more=True) put.add('/app/ci-test/v1/config11', DELETE_ME_VALUE, desc='desc', add_more=True) put.add('/shared/jordan/testrepl', DELETE_ME_VALUE, desc='desc', add_more=True, delete_first=False) put.add('/shared/jordan/testrepl2', DELETE_ME_VALUE, desc='desc', add_more=True, delete_first=False) put.add('/shared/jordan/testrepl3', DELETE_ME_VALUE, desc='desc', add_more=True, delete_first=False) put.add('/shared/jordan/testrepl4', DELETE_ME_VALUE, desc='desc', add_more=False, delete_first=False) print("EXECUTING DELETE!!!!") delete = DeleteAction(extra_args=self.extra_args) delete.delete(self.missing_key)
def validate_error(self): delete = DeleteAction(extra_args=self.extra_args) delete.delete(self.missing_key) print( f"Testing: {CLI_NAME} config {validate.name} --env {DEFAULT_ENV} " f"--config figcli/test/assets/error/figgy.json {self.extra_args}") child = TestUtils.spawn( f'{CLI_NAME} config {validate.name} --env {DEFAULT_ENV} ' f'--config figcli/test/assets/error/figgy.json --skip-upgrade {self.extra_args}' ) child.expect('.*missing at least one.*') print("VALIDATE ERROR VERIFIED")
def sync_with_orphans(self): delete = DeleteAction(extra_args=self.extra_args) delete.delete(self.missing_key) print("Successful sync + prune passed!") print(f"Testing: {CLI_NAME} config {sync.name} --env {DEFAULT_ENV} " f"--config figcli/test/assets/error/figgy.json") child = TestUtils.spawn(f'{CLI_NAME} config {sync.name} --env {DEFAULT_ENV} ' f'--config figcli/test/assets/error/figgy.json --skip-upgrade {self.extra_args}', timeout=45) child.expect('.*Unused Parameter:.*/app/ci-test/v1/config11.*') child.expect('.*Sync failed.*') print("Sync with stray configs passed!")
def prune(self): delete = DeleteAction(extra_args=self.extra_args) delete.delete('/app/test-promote/v1/config9', delete_another=True, check_delete=False) delete.delete('/app/test-promote/v1/config11', delete_another=True, check_delete=False) delete.delete('/app/test-promote/v1/config12', delete_another=True, check_delete=False) delete.delete('/app/test-promote/v1/config13', delete_another=False, check_delete=False)
def add(self, key, value, desc, delete_first=True, add_more=False): if delete_first: delete = DeleteAction(extra_args=self.extra_args) delete.delete(key) self.expect('.*Please input a PS Name.*') self.sendline(key) self.expect('.*Please input a value.*') self.sendline(value) self.expect('.*Please input an optional.*') self.sendline(desc) self.expect('.*secret?.*') self.sendline('n') self.expect('.*another.*') if add_more: self.sendline('y') else: self.sendline('n')
def add_encrypt_app(self, key, value, desc, add_more=False): delete = DeleteAction(extra_args=self.extra_args) delete.delete(key) self.expect('.*Please input a PS Name.*') self.sendline(key) self.expect('.*Please input a value.*') self.sendline(value) self.expect('.*Please input an optional.*') self.sendline(desc) self.expect('.*secret?.*') self.sendline('y') index = self.expect(['.*key.*', '.*another.*']) if index == 0: self.sendline('app') self.expect('.*another.*') if add_more: self.sendline('y') else: self.sendline('n')
def run(self): put = PutAction(extra_args=self.extra_args) guuid = uuid.uuid4().hex key = f"{param_test_prefix}{guuid}" put.add(key, DELETE_ME_VALUE, 'desc', add_more=False) get = GetAction(extra_args=self.extra_args) get.get(key, DELETE_ME_VALUE, get_more=False) self.step( f"Sleeping {AUDIT_PROPAGATION_TIME} to allow for lambda -> dynamo audit log insert." ) time.sleep(AUDIT_PROPAGATION_TIME) self.step( f"Looking up audit log for: {key}. If this fails, the lambda could be broken. " ) self.audit(key) delete = DeleteAction(extra_args=self.extra_args) delete.delete(key) new_uuid = uuid.uuid4().hex self.step("Testing searching for non-existent audit log.") self.audit(f'/doesnt/exist/{new_uuid}', expect_results=False)
def run(self): put = PutAction(extra_args=self.extra_args) # Use a number > 10 so paging is tested minimum, maximum = 1, 12 put.add(param_1, param_1_val, param_1_desc, add_more=True, delete_first=False) for i in range(minimum, maximum): more = i < maximum - 1 put.add_another(f'{param_1}-{i}', param_1_val, f'{param_1_desc}-{i}', add_more=more) child = TestUtils.spawn( f'{CLI_NAME} config {dump.name} --env {DEFAULT_ENV} {self.extra_args}' f' --skip-upgrade') self.step( f"Testing `{CLI_NAME} config {dump.name} --env {DEFAULT_ENV}`") child.expect('.*to dump from.*') child.sendline(dump_prefix) child.expect(f'.*{param_1}-{minimum}.*{param_1}-{maximum-1}.*') print(f"Dump was successful.") delete = DeleteAction(extra_args=self.extra_args) delete.delete(param_1, delete_another=True, check_delete=False) for i in range(minimum, maximum): delete.delete(f'{param_1}-{i}', delete_another=i < maximum - 1)
def edit(self): # Get Value child = TestUtils.spawn( f'{CLI_NAME} config {edit.name} --env {DEFAULT_ENV} ' f'--skip-upgrade {self.extra_args}') child.expect('.*Please input a PS Name.*') child.sendline(param_1) time.sleep(12) # Give edit time to start child.send(DevEdit._VALUE) child.sendcontrol('n') # <-- sends TAB child.send(DevEdit._DESC) child.sendcontrol('n') # <-- sends TAB child.sendcontrol('m') # <-- Sends ENTER child.expect('.*secret.*') child.sendline('n') child.expect('.*saved successfully.*') print("Add success. Checking successful save") get = GetAction(extra_args=self.extra_args) get.get(param_1, DevEdit._VALUE, DevEdit._DESC) delete = DeleteAction(extra_args=self.extra_args) delete.delete(param_1)
def run(self): self.step(f"Testing PUT for {param_1}") self.add(param_1, param_1_val, param_1_desc) delete = DeleteAction(extra_args=self.extra_args) delete.delete(param_1, check_delete=True)
def _cleanup(self, min: int, max: int): delete = DeleteAction(extra_args=self.extra_args) delete.delete(param_1, delete_another=True) for i in range(min, max): delete.delete(f'{param_1}-{i}', delete_another=i < max - 1)
def _cleanup(self): delete = DeleteAction(extra_args=self.extra_args) delete.delete(KEY_PATH, delete_another=False)
def run(self): minimum, maximum = 1, 3 first_val = 'FIRST_VAL' second_val = 'SECOND_VAL' self.step("Adding new configs. To Restore") self._setup(minimum, maximum, value_override=first_val) print("Waiting for propagation...") time.sleep(RESTORE_PROPAGATION_TIME) print("Validating") self._audit(minimum, maximum) restore_breakpoint_1 = int(time.time() * 1000) print( f"First restore breakpoint: {restore_breakpoint_1} - would expect val of {first_val}" ) time.sleep(15) self._setup(minimum, maximum, value_override=second_val) print("Waiting for propagation...") time.sleep(RESTORE_PROPAGATION_TIME) print("Validating") self._audit(minimum, maximum) restore_breakpoint_2 = int(time.time() * 1000) print( f"Second restore breakpoint: {restore_breakpoint_1} - would expect val of {second_val}" ) time.sleep(25) restore_prefix = f'{param_test_prefix}{self._guuid}/' self.step( f"Attempting restore to time: {restore_breakpoint_1} with prefix: {restore_prefix}" ) child = TestUtils.spawn( f'{CLI_NAME} config {restore.name} --env {DEFAULT_ENV} --skip-upgrade' f' --point-in-time {self.extra_args}') child.expect('.*Which.*recursively restore.*') child.sendline(restore_prefix) child.expect('.*Seconds.*restore.*') child.sendline(f'{restore_breakpoint_1}') child.expect('.*Are you sure.*') child.sendline('y') print("Checking restore output...\r\n\r\n") child.expect(f'.*Value.*{param_test_prefix}{self._guuid}/test_param.*') child.expect( f'.*restored successfully!.*' ) ## <-- this is needed or else the child proccess exits too early time.sleep(5) self.step("Validating values were rolled back... Part 1") get = GetAction(extra_args=self.extra_args) get.get(f'{param_test_prefix}{self._guuid}/test_param', first_val, get_more=True) for i in range(minimum, maximum): get.get(f'{param_test_prefix}{self._guuid}/test_param-{i}', first_val, get_more=i < maximum - 1) print("Values were rolled back successfully") time.sleep(30) print("Testing restore to second restore point") restore_prefix = f'{param_test_prefix}{self._guuid}/' self.step( f"Attempting restore to time: {restore_breakpoint_2} with prefix: {restore_prefix}" ) child = TestUtils.spawn( f'{CLI_NAME} config {restore.name} --env {DEFAULT_ENV} --skip-upgrade' f' --point-in-time {self.extra_args}') child.expect('.*Which.*recursively restore.*') child.sendline(restore_prefix) child.expect('.*Seconds.*restore.*') child.sendline(f'{restore_breakpoint_2}') child.expect('.*Are you sure.*') child.sendline('y') print("Checking restore output...\r\n\r\n") child.expect( f'.*Restoring.*{param_test_prefix}{self._guuid}/test_param.*{second_val}.*' ) child.expect( f'.*restored successfully!.*' ) ## <-- this is needed or else the child proccess exits too early time.sleep(5) self.step("Validating values were rolled back... Part 2") get = GetAction(extra_args=self.extra_args) get.get(f'{param_test_prefix}{self._guuid}/test_param', second_val, get_more=True) for i in range(minimum, maximum): get.get(f'{param_test_prefix}{self._guuid}/test_param-{i}', second_val, get_more=i < maximum - 1) print("Values were rolled forward successfully. Cleaning up...") delete = DeleteAction(extra_args=self.extra_args) delete.delete(f'{param_test_prefix}{self._guuid}/test_param', delete_another=True) for i in range(minimum, maximum): delete.delete(f'{param_test_prefix}{self._guuid}/test_param-{i}', delete_another=i < maximum - 1)
def prep(self): with open('figcli/test/assets/data_repl_conf.json', 'r') as file: content = json.loads(file.read()).get('replicate_figs') delete = DeleteAction() destinations = list(content.values()) for i in range(0, len(destinations)): print(f"DELETING: {destinations[i]}") if i < len(destinations): delete.delete(destinations[i], delete_another=True) else: delete.delete(destinations[i], delete_another=False) delete = DeleteAction() sources = list(content.keys()) print(f"SOURCES: {sources}") for i in range(0, len(sources)): print(f"DELETING: {destinations[i]}") if i < len(sources): delete.delete(sources[i], delete_another=True) else: delete.delete(sources[i], delete_another=False)