From c2c654f7c918e171fbc3bb92bcbcc0f477277076 Mon Sep 17 00:00:00 2001
From: Georgy Moshkin <gmoshkin@picodata.io>
Date: Fri, 2 Dec 2022 14:05:08 +0300
Subject: [PATCH] test: fix tests

---
 src/main.rs                      | 13 ++++++++--
 test/int/test_basics.py          |  6 ++---
 test/int/test_expelling.py       |  2 +-
 test/int/test_joining.py         | 44 ++++++++++++++------------------
 test/int/test_migration.py       | 25 ++++++++++--------
 test/int/test_network_effects.py |  4 +--
 test/int/test_replication.py     |  2 +-
 7 files changed, 51 insertions(+), 45 deletions(-)

diff --git a/src/main.rs b/src/main.rs
index d5bc563d88..2dd9ad1be2 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -51,8 +51,17 @@ pub struct InnerTest {
 fn picolib_setup(args: &args::Run) {
     set_log_level(args.log_level());
     let l = ::tarantool::lua_state();
-    l.exec("package.loaded.pico = {}").unwrap();
-    l.exec("_G.pico = package.loaded.pico").unwrap();
+    l.exec(
+        "package.loaded.pico = {}
+        _G.pico = package.loaded.pico
+        pico.space = setmetatable({}, { __index =
+            function(self, space_name)
+                return box.space['_picodata_' .. space_name]
+            end
+        })
+        ",
+    )
+    .unwrap();
     let luamod: tlua::LuaTable<_> = l.get("pico").unwrap();
 
     luamod.set("VERSION", env!("CARGO_PKG_VERSION"));
diff --git a/test/int/test_basics.py b/test/int/test_basics.py
index 65d99ab661..cb781627b4 100644
--- a/test/int/test_basics.py
+++ b/test/int/test_basics.py
@@ -219,8 +219,8 @@ def test_raft_log(instance: Instance):
 +-----+----+-----+--------+
 |  1  | 1  |1.0.1|Insert(_picodata_peer_address, [1,"127.0.0.1:{p}"])|
 |  2  | 1  |1.0.2|PersistPeer(i1, 1, r1, Offline(0), {b})|
-|  3  | 1  |1.0.3|Insert(_picodata_state, ["replication_factor",1])|
-|  4  | 1  |1.0.4|Insert(_picodata_state, ["desired_schema_version",0])|
+|  3  | 1  |1.0.3|Insert(_picodata_cluster_state, ["replication_factor",1])|
+|  4  | 1  |1.0.4|Insert(_picodata_cluster_state, ["desired_schema_version",0])|
 |  5  | 1  |     |AddNode(1)|
 |  6  | 2  |     |-|
 |  7  | 2  |1.1.1|PersistPeer(i1, 1, r1, Offline(0) -> Online(1), {b})|
@@ -228,7 +228,7 @@ def test_raft_log(instance: Instance):
 |  9  | 2  |1.1.3|PersistPeer(i1, 1, r1, Replicated(1) -> Online(1), {b})|
 | 10  | 2  |1.1.4|Insert(_picodata_replicaset, ["r1","e0df68c5-e7f9-395f-86b3-30ad9e1b7b07","i1",1.0,0])|
 | 11  | 2  |1.1.5|PersistPeer(i1, 1, r1, ShardingInitialized(1) -> Online(1), {b})|
-| 12  | 2  |1.1.6|Replace(_picodata_state, ["vshard_bootstrapped",true])|
+| 12  | 2  |1.1.6|Replace(_picodata_cluster_state, ["vshard_bootstrapped",true])|
 | 13  | 2  |1.1.7|PersistPeer(i1, 1, r1, Online(1), {b})|
 +-----+----+-----+--------+
 """.format(  # noqa: E501
diff --git a/test/int/test_expelling.py b/test/int/test_expelling.py
index 2e007fd0af..138cb96392 100644
--- a/test/int/test_expelling.py
+++ b/test/int/test_expelling.py
@@ -16,7 +16,7 @@ def assert_peer_expelled(expelled_peer: Instance, instance: Instance):
 
 def assert_voters(voters: list[Instance], instance: Instance):
     expected_voters = list(map(lambda i: i.raft_id, voters))
-    real_voters = instance.eval("return box.space.raft_state:get('voters').value")
+    real_voters = instance.eval("return pico.space.raft_state:get('voters').value")
     assert real_voters.sort() == expected_voters.sort()
 
 
diff --git a/test/int/test_joining.py b/test/int/test_joining.py
index b49339d9fe..0f79f5d21a 100644
--- a/test/int/test_joining.py
+++ b/test/int/test_joining.py
@@ -21,16 +21,6 @@ def cluster3(cluster: Cluster):
     return cluster
 
 
-def column_index(instance, space, name):
-    format = instance.eval(f"return box.space.{space}:format()")
-    i = 0
-    for field in format:
-        if field["name"] == name:
-            return i
-        i = i + 1
-    raise (f"Column {name} not found in space {space}")
-
-
 def raft_join(
     peer: Instance,
     cluster_id: str,
@@ -56,7 +46,7 @@ def raft_join(
 
 def replicaset_id(instance: Instance):
     return instance.eval(
-        "return box.space.raft_group:get(...).replicaset_id", instance.instance_id
+        "return pico.space.raft_group:get(...).replicaset_id", instance.instance_id
     )
 
 
@@ -139,7 +129,7 @@ def test_replication(cluster: Cluster):
     for instance in cluster.instances:
         with instance.connect(1) as conn:
             raft_peer = conn.eval(
-                "return box.space.raft_group:get(...):tomap()",
+                "return pico.space.raft_group:get(...):tomap()",
                 instance.instance_id,
             )[0]
             space_cluster = conn.select("_cluster")
@@ -191,20 +181,24 @@ def test_init_replication_factor(cluster: Cluster):
 
     def read_replication_factor(instance):
         return instance.eval(
-            'return box.space.cluster_state:get("replication_factor")'
-        )[1]
+            'return pico.space.cluster_state:get("replication_factor").value'
+        )
 
     assert read_replication_factor(i1) == 2
     assert read_replication_factor(i2) == 2
     assert read_replication_factor(i3) == 2
 
-    INDEX_OF_REPLICASET_ID = column_index(i1, "raft_group", "replicaset_id")
-
-    def read_raft_groups(instance):
-        tuples = instance.eval("return box.space.raft_group:select()")
-        return set(map(lambda t: t[INDEX_OF_REPLICASET_ID], tuples))
+    replicaset_ids = i1.eval(
+        """
+        return pico.space.raft_group:pairs()
+            :map(function(peer)
+                return peer.replicaset_id
+            end)
+            :totable()
+    """
+    )
 
-    assert read_raft_groups(i1) == {"r1", "r2"}
+    assert {"r1", "r2"} == set(replicaset_ids)
 
 
 def test_cluster_id_mismatch(instance: Instance):
@@ -352,11 +346,11 @@ def test_fail_to_join(cluster: Cluster):
 
     joined_instances = i1.eval(
         """
-        res = {}
-        for _, t in pairs(box.space.raft_group:select()) do
-            table.insert(res, { t.instance_id, t.raft_id })
-        end
-        return res
+        return pico.space.raft_group:pairs()
+            :map(function(peer)
+                return { peer.instance_id, peer.raft_id }
+            end)
+            :totable()
     """
     )
     assert {tuple(i) for i in joined_instances} == {(i1.instance_id, i1.raft_id)}
diff --git a/test/int/test_migration.py b/test/int/test_migration.py
index a075776f9e..e13e1dcbcc 100644
--- a/test/int/test_migration.py
+++ b/test/int/test_migration.py
@@ -6,7 +6,7 @@ def test_add_migration(cluster: Cluster):
     i1, i2 = cluster.instances
     i1.promote_or_fail()
     i1.eval("pico.add_migration(1, 'migration body')")
-    migrations_table = i2.call("box.space.migrations:select")
+    migrations_table = i2.call("pico.space.migration:select")
     assert [[1, "migration body"]] == migrations_table
 
 
@@ -16,7 +16,7 @@ def test_push_schema_version(cluster: Cluster):
     i1.promote_or_fail()
     i1.eval("pico.push_schema_version(3)")
     key = "desired_schema_version"
-    assert [[key, 3]] == i2.call("box.space.cluster_state:select", [key])
+    assert [[key, 3]] == i2.call("pico.space.cluster_state:select", [key])
 
 
 def test_apply_migrations(cluster: Cluster):
@@ -39,14 +39,17 @@ def test_apply_migrations(cluster: Cluster):
 
     i1.call("pico.migrate")
 
-    def assert_space_insert(conn):
-        assert conn.insert("test_space", [1, "foo"])
-
-    def assert_replicaset_version(conn, v):
-        position = conn.schema.get_field("replicasets", "current_schema_version")["id"]
-        assert [v, v, v] == [tuple[position] for tuple in conn.select("replicasets")]
-
     for i in cluster.instances:
         with i.connect(timeout=1) as conn:
-            assert_space_insert(conn)
-            assert_replicaset_version(conn, 2)
+            assert conn.insert("test_space", [1, "foo"])
+
+        schema_versions = i.eval(
+            """
+            return pico.space.replicaset:pairs()
+                :map(function(replicaset)
+                    return replicaset.current_schema_version
+                end)
+                :totable()
+        """
+        )
+        assert {2} == set(schema_versions)
diff --git a/test/int/test_network_effects.py b/test/int/test_network_effects.py
index 45a8034b1a..62adcf366f 100644
--- a/test/int/test_network_effects.py
+++ b/test/int/test_network_effects.py
@@ -68,7 +68,7 @@ def test_log_rollback(cluster3: Cluster):
     i3.assert_raft_status("Follower")
 
     def propose_state_change(srv: Instance, value):
-        code = 'box.space.cluster_state:put({"test-timeline", "%s"})' % value
+        code = 'pico.space.cluster_state:put({"test-timeline", "%s"})' % value
         return srv.raft_propose_eval(code, 0.1)
 
     propose_state_change(i1, "i1 is a leader")
@@ -91,7 +91,7 @@ def test_log_rollback(cluster3: Cluster):
     retrying(lambda: i3.assert_raft_status("Follower", i2.raft_id))
 
     print(i2.call("pico.raft_log", dict(return_string=True)))
-    print(i2.call("box.space.raft_state:select"))
+    print(i2.call("pico.space.raft_state:select"))
     propose_state_change(i2, "i2 takes the leadership")
 
     # Now i1 has an uncommitted, but persisted entry that should be rolled back.
diff --git a/test/int/test_replication.py b/test/int/test_replication.py
index 4021a63606..a71cf28805 100644
--- a/test/int/test_replication.py
+++ b/test/int/test_replication.py
@@ -25,7 +25,7 @@ def wait_repl_master(i: Instance, other_than=None):
     repl_master = i.eval(
         """
         local rid = pico.peer_info(...).replicaset_id
-        return box.space.replicasets:get(rid).master_id
+        return pico.space.replicaset:get(rid).master_id
     """,
         i.instance_id,
     )
-- 
GitLab