diff --git a/tests_python/tests_014/test_mockup.py b/tests_python/tests_014/test_mockup.py index 0de1f26906d6ed6c251cd6e2139ab6a9c56913ca..19c74ace3920f709d750847e24703938cbfb00b6 100644 --- a/tests_python/tests_014/test_mockup.py +++ b/tests_python/tests_014/test_mockup.py @@ -9,10 +9,7 @@ """ import json import os -import re -import shutil import tempfile -from pathlib import Path from typing import Any, List, Optional, Tuple import pytest from launchers.sandbox import Sandbox @@ -57,140 +54,6 @@ def _create_accounts_list(): return accounts_list -@pytest.mark.client -def test_transfer_bad_base_dir(sandbox: Sandbox): - """Executes `octez-client --base-dir /tmp/mdir create mockup` - when /tmp/mdir looks like a dubious base directory. - Checks that a warning is printed. - """ - try: - unmanaged_client = sandbox.create_client() - res = unmanaged_client.create_mockup( - protocol=protocol.HASH - ).create_mockup_result - assert res == CreateMockupResult.OK - base_dir = unmanaged_client.base_dir - mockup_dir = os.path.join(base_dir, "mockup") - - # A valid mockup has a directory named "mockup", in its directory: - assert os.path.isdir(mockup_dir) - mock_client = sandbox.create_client(base_dir=base_dir, mode="mockup") - # Delete this directory: - shutil.rmtree(mockup_dir) - # And put a file instead: - Path(os.path.join(mockup_dir)).touch() - - # Now execute a command - cmd = ["transfer", "1", "from", "bootstrap1", "to", "bootstrap2"] - (_, err_output, _) = mock_client.run_generic(cmd, check=False) - # See - # https://gitlab.com/tezos/tezos/-/merge_requests/1760#note_329071488 - # for the content being matched - searched = "Some commands .* might not work correctly." - # Witness that warning is printed: - assert re.search( - searched, err_output - ), f"'{searched}' not matched in error output" - finally: - shutil.rmtree(base_dir) - - -@pytest.mark.client -def test_config_show_mockup(mockup_client: Client): - """Executes `octez-client --mode mockup config show` in - a state where it should succeed. - """ - mockup_client.run_generic(["--protocol", protocol.HASH, "config", "show"]) - - -@pytest.mark.client -def test_config_show_mockup_fail(mockup_client: Client): - """Executes `octez-client --mode mockup config show` when - base dir is NOT a mockup. It should fail as this is dangerous - (the default base directory could contain sensitive data, - such as private keys) - """ - shutil.rmtree(mockup_client.base_dir) # See test_config_init_mockup_fail - # for a variant of how to make the base dir invalid for the mockup mode - _, _, return_code = mockup_client.run_generic( - ["config", "show"], check=False - ) - - # recreate directory: the cleanup later on expects its existence - os.mkdir(mockup_client.base_dir) - assert return_code != 0 - - -@pytest.mark.client -def test_config_init_mockup(mockup_client: Client): - """Executes `octez-client config init mockup` in - a state where it should succeed. - """ - # We cannot use NamedTemporaryFile because `config init mockup` - # does not overwrite files. Because NamedTemporaryFile creates the file - # it would make the test fail. - ba_json_file = tempfile.mktemp(prefix='tezos-bootstrap-accounts') - pc_json_file = tempfile.mktemp(prefix='tezos-proto-consts') - # 1/ call `config init mockup` - mockup_client.run( - [ - "--protocol", - protocol.HASH, - "config", - "init", - f"--{_BA_FLAG}", - ba_json_file, - f"--{_PC_FLAG}", - pc_json_file, - ] - ) - - # 2/ Try loading the files, to check they are valid json - with open(ba_json_file) as handle: - json.load(handle) - with open(pc_json_file) as handle: - json.load(handle) - - # Cleanup - os.remove(ba_json_file) - os.remove(pc_json_file) - - -@pytest.mark.client -def test_config_init_mockup_fail(mockup_client: Client): - """Executes `octez-client config init mockup` when - base dir is NOT a mockup. It should fail as this is dangerous - (the default base directory could contain sensitive data, - such as private keys) - """ - ba_json_file = tempfile.mktemp(prefix='tezos-bootstrap-accounts') - pc_json_file = tempfile.mktemp(prefix='tezos-proto-consts') - cmd = [ - "--protocol", - protocol.HASH, - "config", - "init", - f"--{_BA_FLAG}", - ba_json_file, - f"--{_PC_FLAG}", - pc_json_file, - ] - - # A valid mockup has a directory named "mockup" in its base_dir: - mockup_dir = os.path.join(mockup_client.base_dir, "mockup") - assert os.path.isdir(mockup_dir) - # Delete this directory, so that the base_dir is not a valid mockup - # base dir anymore: - shutil.rmtree(mockup_dir) # See test_config_show_mockup_fail above - # for a variant of how to make the base_dir invalid for the mockup mode - - _, _, return_code = mockup_client.run_generic(cmd, check=False) - assert return_code != 0 - # Check the test doesn't leak directories: - assert not os.path.exists(ba_json_file) - assert not os.path.exists(pc_json_file) - - def _try_json_loads(flag: str, string: str) -> Any: """Converts the given string to a json object""" try: diff --git a/tests_python/tests_015/test_mockup.py b/tests_python/tests_015/test_mockup.py index 85aec03afa31c8e9e7c8ceb71d605fb805b43531..453686ad34023cbf3a4193970afdb086b25fed4f 100644 --- a/tests_python/tests_015/test_mockup.py +++ b/tests_python/tests_015/test_mockup.py @@ -10,9 +10,7 @@ import json import os import re -import shutil import tempfile -from pathlib import Path from typing import Any, List, Optional, Tuple, Iterator, Dict from pprint import pformat import pytest @@ -59,140 +57,6 @@ def _create_accounts_list(): return accounts_list -@pytest.mark.client -def test_transfer_bad_base_dir(sandbox: Sandbox): - """Executes `octez-client --base-dir /tmp/mdir create mockup` - when /tmp/mdir looks like a dubious base directory. - Checks that a warning is printed. - """ - try: - unmanaged_client = sandbox.create_client() - res = unmanaged_client.create_mockup( - protocol=protocol.HASH - ).create_mockup_result - assert res == CreateMockupResult.OK - base_dir = unmanaged_client.base_dir - mockup_dir = os.path.join(base_dir, "mockup") - - # A valid mockup has a directory named "mockup", in its directory: - assert os.path.isdir(mockup_dir) - mock_client = sandbox.create_client(base_dir=base_dir, mode="mockup") - # Delete this directory: - shutil.rmtree(mockup_dir) - # And put a file instead: - Path(os.path.join(mockup_dir)).touch() - - # Now execute a command - cmd = ["transfer", "1", "from", "bootstrap1", "to", "bootstrap2"] - (_, err_output, _) = mock_client.run_generic(cmd, check=False) - # See - # https://gitlab.com/tezos/tezos/-/merge_requests/1760#note_329071488 - # for the content being matched - searched = "Some commands .* might not work correctly." - # Witness that warning is printed: - assert re.search( - searched, err_output - ), f"'{searched}' not matched in error output" - finally: - shutil.rmtree(base_dir) - - -@pytest.mark.client -def test_config_show_mockup(mockup_client: Client): - """Executes `octez-client --mode mockup config show` in - a state where it should succeed. - """ - mockup_client.run_generic(["--protocol", protocol.HASH, "config", "show"]) - - -@pytest.mark.client -def test_config_show_mockup_fail(mockup_client: Client): - """Executes `octez-client --mode mockup config show` when - base dir is NOT a mockup. It should fail as this is dangerous - (the default base directory could contain sensitive data, - such as private keys) - """ - shutil.rmtree(mockup_client.base_dir) # See test_config_init_mockup_fail - # for a variant of how to make the base dir invalid for the mockup mode - _, _, return_code = mockup_client.run_generic( - ["config", "show"], check=False - ) - - # recreate directory: the cleanup later on expects its existence - os.mkdir(mockup_client.base_dir) - assert return_code != 0 - - -@pytest.mark.client -def test_config_init_mockup(mockup_client: Client): - """Executes `octez-client config init mockup` in - a state where it should succeed. - """ - # We cannot use NamedTemporaryFile because `config init mockup` - # does not overwrite files. Because NamedTemporaryFile creates the file - # it would make the test fail. - ba_json_file = tempfile.mktemp(prefix='tezos-bootstrap-accounts') - pc_json_file = tempfile.mktemp(prefix='tezos-proto-consts') - # 1/ call `config init mockup` - mockup_client.run( - [ - "--protocol", - protocol.HASH, - "config", - "init", - f"--{_BA_FLAG}", - ba_json_file, - f"--{_PC_FLAG}", - pc_json_file, - ] - ) - - # 2/ Try loading the files, to check they are valid json - with open(ba_json_file) as handle: - json.load(handle) - with open(pc_json_file) as handle: - json.load(handle) - - # Cleanup - os.remove(ba_json_file) - os.remove(pc_json_file) - - -@pytest.mark.client -def test_config_init_mockup_fail(mockup_client: Client): - """Executes `octez-client config init mockup` when - base dir is NOT a mockup. It should fail as this is dangerous - (the default base directory could contain sensitive data, - such as private keys) - """ - ba_json_file = tempfile.mktemp(prefix='tezos-bootstrap-accounts') - pc_json_file = tempfile.mktemp(prefix='tezos-proto-consts') - cmd = [ - "--protocol", - protocol.HASH, - "config", - "init", - f"--{_BA_FLAG}", - ba_json_file, - f"--{_PC_FLAG}", - pc_json_file, - ] - - # A valid mockup has a directory named "mockup" in its base_dir: - mockup_dir = os.path.join(mockup_client.base_dir, "mockup") - assert os.path.isdir(mockup_dir) - # Delete this directory, so that the base_dir is not a valid mockup - # base dir anymore: - shutil.rmtree(mockup_dir) # See test_config_show_mockup_fail above - # for a variant of how to make the base_dir invalid for the mockup mode - - _, _, return_code = mockup_client.run_generic(cmd, check=False) - assert return_code != 0 - # Check the test doesn't leak directories: - assert not os.path.exists(ba_json_file) - assert not os.path.exists(pc_json_file) - - def _try_json_loads(flag: str, string: str) -> Any: """Converts the given string to a json object""" try: diff --git a/tests_python/tests_alpha/test_mockup.py b/tests_python/tests_alpha/test_mockup.py index c8de37b60abdcdb061d0c27b340a1e91ccb2a15a..9aeeeefc483b6f51b4c7de1935458b93e1910587 100644 --- a/tests_python/tests_alpha/test_mockup.py +++ b/tests_python/tests_alpha/test_mockup.py @@ -10,9 +10,7 @@ import json import os import re -import shutil import tempfile -from pathlib import Path from typing import Any, List, Optional, Tuple, Iterator, Dict from pprint import pformat import pytest @@ -59,140 +57,6 @@ def _create_accounts_list(): return accounts_list -@pytest.mark.client -def test_transfer_bad_base_dir(sandbox: Sandbox): - """Executes `octez-client --base-dir /tmp/mdir create mockup` - when /tmp/mdir looks like a dubious base directory. - Checks that a warning is printed. - """ - try: - unmanaged_client = sandbox.create_client() - res = unmanaged_client.create_mockup( - protocol=protocol.HASH - ).create_mockup_result - assert res == CreateMockupResult.OK - base_dir = unmanaged_client.base_dir - mockup_dir = os.path.join(base_dir, "mockup") - - # A valid mockup has a directory named "mockup", in its directory: - assert os.path.isdir(mockup_dir) - mock_client = sandbox.create_client(base_dir=base_dir, mode="mockup") - # Delete this directory: - shutil.rmtree(mockup_dir) - # And put a file instead: - Path(os.path.join(mockup_dir)).touch() - - # Now execute a command - cmd = ["transfer", "1", "from", "bootstrap1", "to", "bootstrap2"] - (_, err_output, _) = mock_client.run_generic(cmd, check=False) - # See - # https://gitlab.com/tezos/tezos/-/merge_requests/1760#note_329071488 - # for the content being matched - searched = "Some commands .* might not work correctly." - # Witness that warning is printed: - assert re.search( - searched, err_output - ), f"'{searched}' not matched in error output" - finally: - shutil.rmtree(base_dir) - - -@pytest.mark.client -def test_config_show_mockup(mockup_client: Client): - """Executes `octez-client --mode mockup config show` in - a state where it should succeed. - """ - mockup_client.run_generic(["--protocol", protocol.HASH, "config", "show"]) - - -@pytest.mark.client -def test_config_show_mockup_fail(mockup_client: Client): - """Executes `octez-client --mode mockup config show` when - base dir is NOT a mockup. It should fail as this is dangerous - (the default base directory could contain sensitive data, - such as private keys) - """ - shutil.rmtree(mockup_client.base_dir) # See test_config_init_mockup_fail - # for a variant of how to make the base dir invalid for the mockup mode - _, _, return_code = mockup_client.run_generic( - ["config", "show"], check=False - ) - - # recreate directory: the cleanup later on expects its existence - os.mkdir(mockup_client.base_dir) - assert return_code != 0 - - -@pytest.mark.client -def test_config_init_mockup(mockup_client: Client): - """Executes `octez-client config init mockup` in - a state where it should succeed. - """ - # We cannot use NamedTemporaryFile because `config init mockup` - # does not overwrite files. Because NamedTemporaryFile creates the file - # it would make the test fail. - ba_json_file = tempfile.mktemp(prefix='tezos-bootstrap-accounts') - pc_json_file = tempfile.mktemp(prefix='tezos-proto-consts') - # 1/ call `config init mockup` - mockup_client.run( - [ - "--protocol", - protocol.HASH, - "config", - "init", - f"--{_BA_FLAG}", - ba_json_file, - f"--{_PC_FLAG}", - pc_json_file, - ] - ) - - # 2/ Try loading the files, to check they are valid json - with open(ba_json_file) as handle: - json.load(handle) - with open(pc_json_file) as handle: - json.load(handle) - - # Cleanup - os.remove(ba_json_file) - os.remove(pc_json_file) - - -@pytest.mark.client -def test_config_init_mockup_fail(mockup_client: Client): - """Executes `octez-client config init mockup` when - base dir is NOT a mockup. It should fail as this is dangerous - (the default base directory could contain sensitive data, - such as private keys) - """ - ba_json_file = tempfile.mktemp(prefix='tezos-bootstrap-accounts') - pc_json_file = tempfile.mktemp(prefix='tezos-proto-consts') - cmd = [ - "--protocol", - protocol.HASH, - "config", - "init", - f"--{_BA_FLAG}", - ba_json_file, - f"--{_PC_FLAG}", - pc_json_file, - ] - - # A valid mockup has a directory named "mockup" in its base_dir: - mockup_dir = os.path.join(mockup_client.base_dir, "mockup") - assert os.path.isdir(mockup_dir) - # Delete this directory, so that the base_dir is not a valid mockup - # base dir anymore: - shutil.rmtree(mockup_dir) # See test_config_show_mockup_fail above - # for a variant of how to make the base_dir invalid for the mockup mode - - _, _, return_code = mockup_client.run_generic(cmd, check=False) - assert return_code != 0 - # Check the test doesn't leak directories: - assert not os.path.exists(ba_json_file) - assert not os.path.exists(pc_json_file) - - def _try_json_loads(flag: str, string: str) -> Any: """Converts the given string to a json object""" try: diff --git a/tezt/lib_core/check.ml b/tezt/lib_core/check.ml index 073865fcfc0f41d82bcd4dc7dbd99f9f9af6de73..94c0bc9ae24ac67022104ddc5c27766360fce489 100644 --- a/tezt/lib_core/check.ml +++ b/tezt/lib_core/check.ml @@ -381,6 +381,18 @@ let file_exists ?__LOC__ path = if not (Sys.file_exists path) then Test.fail ?__LOC__ "expected that file %s exists" path +let file_not_exists ?__LOC__ path = + if Sys.file_exists path then + Test.fail ?__LOC__ "expected that file %s does not exists" path + +let directory_exists ?__LOC__ path = + if not (Sys.file_exists path && Sys.is_directory path) then + Test.fail ?__LOC__ "expected that directory %s exists" path + +let directory_not_exists ?__LOC__ path = + if Sys.file_exists path && Sys.is_directory path then + Test.fail ?__LOC__ "expected that directory %s does not exists" path + let is_true ?__LOC__ b ~error_msg = if not b then Test.fail ?__LOC__ "%s" error_msg diff --git a/tezt/lib_core/check.mli b/tezt/lib_core/check.mli index 9a9abc81d580a1a8d6bd4947fa32e9358c7cce45..23d9d712bca8614e213c67626f25aa216fbc14f3 100644 --- a/tezt/lib_core/check.mli +++ b/tezt/lib_core/check.mli @@ -279,6 +279,21 @@ val raises : (** Check that a file with the given name exists. *) val file_exists : ?__LOC__:string -> string -> unit +(** Check that a file with the given name does not exist. *) +val file_not_exists : ?__LOC__:string -> string -> unit + +(** Check that a directory with the given name exists. + + This [directory_exists path] succeeds if there is a file at + [path] and it is a directory. *) +val directory_exists : ?__LOC__:string -> string -> unit + +(** Check that a directory with the given name does not exist. + + This [directory_not_exists path] succeeds either if there is a + non-directory file at [path] or if there is no file at [path]. *) +val directory_not_exists : ?__LOC__:string -> string -> unit + (** {2 Predicates on booleans} *) (** Check that a boolean is true. diff --git a/tezt/lib_tezos/client.ml b/tezt/lib_tezos/client.ml index 0deca8832705ce2d7c214b1244ad66da96867d56..2b4567c19262cb38bb13ab11987d95540dc6c271 100644 --- a/tezt/lib_tezos/client.ml +++ b/tezt/lib_tezos/client.ml @@ -2239,3 +2239,22 @@ let convert_script ~script ~src_format ~dst_format client = |> Process.check_and_read_stdout let bootstrapped client = spawn_command client ["bootstrapped"] |> Process.check + +let spawn_config_show ?protocol client = + spawn_command client + @@ Cli_arg.optional_arg "protocol" Protocol.hash protocol + @ ["config"; "show"] + +let config_show ?protocol client = + spawn_config_show ?protocol client |> Process.check + +let spawn_config_init ?protocol ?bootstrap_accounts ?protocol_constants client = + spawn_command client + @@ Cli_arg.optional_arg "protocol" Protocol.hash protocol + @ ["config"; "init"] + @ Cli_arg.optional_arg "bootstrap-accounts" Fun.id bootstrap_accounts + @ Cli_arg.optional_arg "protocol-constants" Fun.id protocol_constants + +let config_init ?protocol ?bootstrap_accounts ?protocol_constants client = + spawn_config_init ?protocol ?bootstrap_accounts ?protocol_constants client + |> Process.check diff --git a/tezt/lib_tezos/client.mli b/tezt/lib_tezos/client.mli index f314774d2cb5c4487a448ee91f7147ec2168a168..e47c30f9d1b0ed52b3f85bca877d738bfb5cb83b 100644 --- a/tezt/lib_tezos/client.mli +++ b/tezt/lib_tezos/client.mli @@ -1668,3 +1668,25 @@ val convert_script : (** Run [octez-client bootstrapped]. *) val bootstrapped : t -> unit Lwt.t + +(** Run [tezos-client config show]. *) +val config_show : ?protocol:Protocol.t -> t -> unit Lwt.t + +(** Same as [config_show], but do not wait for the process to exit. *) +val spawn_config_show : ?protocol:Protocol.t -> t -> Process.t + +(** Run [tezos-client config show]. *) +val config_init : + ?protocol:Protocol.t -> + ?bootstrap_accounts:string -> + ?protocol_constants:string -> + t -> + unit Lwt.t + +(** Same as [config_init], but do not wait for the process to exit. *) +val spawn_config_init : + ?protocol:Protocol.t -> + ?bootstrap_accounts:string -> + ?protocol_constants:string -> + t -> + Process.t diff --git a/tezt/tests/mockup.ml b/tezt/tests/mockup.ml index c469fcb86ff8761399143eae6092ed4e62a041c8..64e4fd8180b18d62eeddb2db6f18b2069acba697 100644 --- a/tezt/tests/mockup.ml +++ b/tezt/tests/mockup.ml @@ -632,7 +632,7 @@ let test_create_mockup_dir_exists_nonempty = ~tags:["mockup"; "client"; "base_dir"] @@ fun protocol -> let base_dir = Temp.dir "mockup_dir" in - Base.write_file ~contents:"" (base_dir ^ "/" ^ "whatever") ; + write_file ~contents:"" (base_dir // "whatever") ; let client = Client.create_with_mode ~base_dir Client.Mockup in let* () = Client.spawn_create_mockup client ~protocol @@ -771,6 +771,114 @@ let test_create_mockup_custom_bootstrap_accounts = ~error_msg:"Expected names %R, got %L") ; unit +let rmdir dir = Process.spawn "rm" ["-rf"; dir] |> Process.check + +(* Executes [tezos-client --base-dir /tmp/mdir create mockup] when + [/tmp/mdir] looks like a dubious base directory. Checks that a warning + is printed. *) +let test_transfer_bad_base_dir = + Protocol.register_test + ~__FILE__ + ~title:"(Mockup) Transfer bad base dir." + ~tags:["mockup"; "client"; "initialization"] + @@ fun protocol -> + Log.info "First create mockup with an empty base dir" ; + let base_dir = Temp.dir "mockup-dir" in + Sys.rmdir base_dir ; + let client = Client.create_with_mode ~base_dir Client.Mockup in + let* () = Client.create_mockup ~protocol client in + let base_dir = Client.base_dir client in + let mockup_dir = base_dir // "mockup" in + Log.info "A valid mockup has a directory named [mockup], in its directory" ; + Check.directory_exists ~__LOC__ mockup_dir ; + + Log.info "Delete this directory:" ; + let* () = rmdir mockup_dir in + Log.info "And put a file instead:" ; + write_file mockup_dir ~contents:"" ; + + Log.info "Now execute a command" ; + let* () = + Client.spawn_transfer + ~amount:Tez.one + ~giver:"bootstrap1" + ~receiver:"bootstrap2" + client + |> Process.check_error + ~msg:(rex "Some commands .* might not work correctly.") + in + unit + +(* Executes [tezos-client --mode mockup config show] in a state where + it should succeed. *) +let test_config_show_mockup = + Protocol.register_test + ~__FILE__ + ~title:"(Mockup) Show config." + ~tags:["mockup"; "client"; "config"] + @@ fun protocol -> + let* client = Client.init_mockup ~protocol () in + let* _ = Client.config_show ~protocol client in + unit + +(* Executes [tezos-client --mode mockup config show] when base dir is + NOT a mockup. It should fail as this is dangerous (the default base + directory could contain sensitive data, such as private keys) *) +let test_config_show_mockup_fail = + Protocol.register_test + ~__FILE__ + ~title:"(Mockup) Show config failure." + ~tags:["mockup"; "client"; "config"] + @@ fun protocol -> + let* client = Client.init_mockup ~protocol () in + let* () = rmdir (Client.base_dir client) in + let* _ = Client.spawn_config_show ~protocol client |> Process.check_error in + unit + +(* Executes [tezos-client config init mockup] in a state where it + should succeed *) +let test_config_init_mockup = + Protocol.register_test + ~__FILE__ + ~title:"(Mockup) Mockup config initialization." + ~tags:["mockup"; "client"; "config"; "initialization"] + @@ fun protocol -> + let protocol_constants = Temp.file "protocol-constants.json" in + let bootstrap_accounts = Temp.file "bootstrap-accounts.json" in + let* client = Client.init_mockup ~protocol () in + let* () = + Client.config_init ~protocol ~bootstrap_accounts ~protocol_constants client + in + let (_ : JSON.t) = JSON.parse_file protocol_constants in + let (_ : JSON.t) = JSON.parse_file bootstrap_accounts in + unit + +(* Executes [tezos-client config init mockup] when base dir is NOT a + mockup. It should fail as this is dangerous (the default base + directory could contain sensitive data, such as private keys) *) +let test_config_init_mockup_fail = + Protocol.register_test + ~__FILE__ + ~title:"(Mockup) Mockup config initialization failure." + ~tags:["mockup"; "client"; "config"; "initialization"] + @@ fun protocol -> + let protocol_constants = Temp.file "protocol-constants.json" in + let bootstrap_accounts = Temp.file "bootstrap-accounts.json" in + let* client = Client.init_mockup ~protocol () in + Log.info "remove the mockup directory to invalidate the mockup state" ; + let* () = rmdir (Client.base_dir client // "mockup") in + let* () = + Client.spawn_config_init + ~protocol + ~bootstrap_accounts + ~protocol_constants + client + |> Process.check_error + in + Check.file_not_exists ~__LOC__ protocol_constants ; + Check.file_not_exists ~__LOC__ bootstrap_accounts ; + unit + let register ~protocols = test_rpc_list protocols ; test_same_transfer_twice protocols ; @@ -787,7 +895,12 @@ let register ~protocols = test_retrieve_addresses protocols ; test_create_mockup_already_initialized protocols ; test_create_mockup_custom_constants protocols ; - test_create_mockup_custom_bootstrap_accounts protocols + test_create_mockup_custom_bootstrap_accounts protocols ; + test_transfer_bad_base_dir protocols ; + test_config_show_mockup protocols ; + test_config_show_mockup_fail protocols ; + test_config_init_mockup protocols ; + test_config_init_mockup_fail protocols let register_global_constants ~protocols = test_register_global_constant_success protocols ;