diff --git a/test/upgrade/upgrade.result b/test/upgrade/upgrade.result
index a63ef345..24ab1f8a 100644
--- a/test/upgrade/upgrade.result
+++ b/test/upgrade/upgrade.result
@@ -8,13 +8,25 @@ git_util = require('git_util')
 util = require('util')
  | ---
  | ...
+vutil = require('vshard.util')
+ | ---
+ | ...
 
--- Commit "Improve compatibility with 1.9".
-version_0_1_15_0 = '79a4dbfc4229e922cbfe4be259193a7b18dc089d'
+oldest_version = nil
+ | ---
+ | ...
+-- On 3.0 old vshard versions won't work. The users are supposed to update
+-- vshard first, and then update Tarantool.
+if vutil.version_is_at_least(3, 0, 0, 'entrypoint', 0, 0) then                  \
+-- Commit 'Support 3.0'.                                                        \
+    oldest_version = '0243bc692fb6b34e26e89ea032214859f1ad53ea'                 \
+else                                                                            \
+-- Commit 'Improve compatibility with 1.9'.                                     \
+    oldest_version = '79a4dbfc4229e922cbfe4be259193a7b18dc089d'                 \
+end
  | ---
  | ...
-vshard_copy_path = util.git_checkout('vshard_git_tree_copy_0_1_15_0',           \
-                                     version_0_1_15_0)
+vshard_copy_path = util.git_checkout('vshard_git_tree_copy', oldest_version)
  | ---
  | ...
 
@@ -47,17 +59,9 @@ test_run:switch('storage_1_a')
  | ---
  | - true
  | ...
-box.space._schema:get({'oncevshard:storage:1'}) or box.space._schema:select()
- | ---
- | - ['oncevshard:storage:1']
- | ...
-vshard.storage.internal.schema_current_version
- | ---
- | - null
- | ...
-vshard.storage.internal.schema_latest_version
+box.space._schema:get{'vshard_version'} or box.space._schema:select()
  | ---
- | - null
+ | - ['vshard_version', 0, 1, 16, 0]
  | ...
 bucket_count = vshard.consts.DEFAULT_BUCKET_COUNT / 2
  | ---
@@ -80,21 +84,9 @@ test_run:switch('storage_2_a')
  | ---
  | - true
  | ...
-box.space._schema:get({'oncevshard:storage:1'}) or box.space._schema:select()
- | ---
- | - ['oncevshard:storage:1']
- | ...
-vshard.storage.internal.schema_current_version
- | ---
- | - null
- | ...
-vshard.storage.internal.schema_latest_version
- | ---
- | - null
- | ...
-vshard.storage._call == nil
+box.space._schema:get{'vshard_version'} or box.space._schema:select()
  | ---
- | - true
+ | - ['vshard_version', 0, 1, 16, 0]
  | ...
 bucket_count = vshard.consts.DEFAULT_BUCKET_COUNT / 2
  | ---
diff --git a/test/upgrade/upgrade.test.lua b/test/upgrade/upgrade.test.lua
index a690fd0e..07f0b08a 100644
--- a/test/upgrade/upgrade.test.lua
+++ b/test/upgrade/upgrade.test.lua
@@ -1,11 +1,19 @@
 test_run = require('test_run').new()
 git_util = require('git_util')
 util = require('util')
+vutil = require('vshard.util')
 
--- Commit "Improve compatibility with 1.9".
-version_0_1_15_0 = '79a4dbfc4229e922cbfe4be259193a7b18dc089d'
-vshard_copy_path = util.git_checkout('vshard_git_tree_copy_0_1_15_0',           \
-                                     version_0_1_15_0)
+oldest_version = nil
+-- On 3.0 old vshard versions won't work. The users are supposed to update
+-- vshard first, and then update Tarantool.
+if vutil.version_is_at_least(3, 0, 0, 'entrypoint', 0, 0) then                  \
+-- Commit 'Support 3.0'.                                                        \
+    oldest_version = '0243bc692fb6b34e26e89ea032214859f1ad53ea'                 \
+else                                                                            \
+-- Commit 'Improve compatibility with 1.9'.                                     \
+    oldest_version = '79a4dbfc4229e922cbfe4be259193a7b18dc089d'                 \
+end
+vshard_copy_path = util.git_checkout('vshard_git_tree_copy', oldest_version)
 
 REPLICASET_1 = { 'storage_1_a', 'storage_1_b' }
 REPLICASET_2 = { 'storage_2_a', 'storage_2_b' }
@@ -17,9 +25,7 @@ util.wait_master(test_run, REPLICASET_2, 'storage_2_a')
 util.map_evals(test_run, {REPLICASET_1, REPLICASET_2}, 'bootstrap_storage(\'memtx\')')
 
 test_run:switch('storage_1_a')
-box.space._schema:get({'oncevshard:storage:1'}) or box.space._schema:select()
-vshard.storage.internal.schema_current_version
-vshard.storage.internal.schema_latest_version
+box.space._schema:get{'vshard_version'} or box.space._schema:select()
 bucket_count = vshard.consts.DEFAULT_BUCKET_COUNT / 2
 vshard.storage.bucket_force_create(1, bucket_count)
 box.begin()                                                                     \
@@ -28,10 +34,7 @@ box.commit()
 box.space.test:count()
 
 test_run:switch('storage_2_a')
-box.space._schema:get({'oncevshard:storage:1'}) or box.space._schema:select()
-vshard.storage.internal.schema_current_version
-vshard.storage.internal.schema_latest_version
-vshard.storage._call == nil
+box.space._schema:get{'vshard_version'} or box.space._schema:select()
 bucket_count = vshard.consts.DEFAULT_BUCKET_COUNT / 2
 first_bucket = vshard.consts.DEFAULT_BUCKET_COUNT / 2 + 1
 vshard.storage.bucket_force_create(first_bucket, bucket_count)