@@ -979,6 +979,20 @@ void TestCoordinationNodeResourcesArePreserved(
979
979
}
980
980
}
981
981
982
+ void WaitReplicationInit (NReplication::TReplicationClient& client, const TString& path) {
983
+ int retry = 0 ;
984
+ do {
985
+ auto result = client.DescribeReplication (path).ExtractValueSync ();
986
+ const auto & desc = result.GetReplicationDescription ();
987
+ if (desc.GetItems ().empty ()) {
988
+ Sleep (TDuration::Seconds (1 ));
989
+ } else {
990
+ break ;
991
+ }
992
+ } while (++retry < 10 );
993
+ UNIT_ASSERT (retry < 10 );
994
+ }
995
+
982
996
void TestReplicationSettingsArePreserved (
983
997
const TString& endpoint,
984
998
NQuery::TSession& session,
@@ -997,20 +1011,6 @@ void TestReplicationSettingsArePreserved(
997
1011
);)" , endpoint.c_str ()), true
998
1012
);
999
1013
1000
- auto waitReplicationInit = [&client]() {
1001
- int retry = 0 ;
1002
- do {
1003
- auto result = client.DescribeReplication (" /Root/replication" ).ExtractValueSync ();
1004
- const auto & desc = result.GetReplicationDescription ();
1005
- if (desc.GetItems ().empty ()) {
1006
- Sleep (TDuration::Seconds (1 ));
1007
- } else {
1008
- break ;
1009
- }
1010
- } while (++retry < 10 );
1011
- UNIT_ASSERT (retry < 10 );
1012
- };
1013
-
1014
1014
auto checkDescription = [&client, &endpoint]() {
1015
1015
auto result = client.DescribeReplication (" /Root/replication" ).ExtractValueSync ();
1016
1016
const auto & desc = result.GetReplicationDescription ();
@@ -1026,12 +1026,12 @@ void TestReplicationSettingsArePreserved(
1026
1026
UNIT_ASSERT_VALUES_EQUAL (items.at (0 ).DstPath , " /Root/replica" );
1027
1027
};
1028
1028
1029
- waitReplicationInit ( );
1029
+ WaitReplicationInit (client, " /Root/replication " );
1030
1030
checkDescription ();
1031
1031
backup ();
1032
1032
ExecuteQuery (session, " DROP ASYNC REPLICATION `/Root/replication` CASCADE;" , true );
1033
1033
restore ();
1034
- waitReplicationInit ( );
1034
+ WaitReplicationInit (client, " /Root/replication " );
1035
1035
checkDescription ();
1036
1036
}
1037
1037
@@ -1545,6 +1545,44 @@ Y_UNIT_TEST_SUITE(BackupRestore) {
1545
1545
);
1546
1546
}
1547
1547
1548
+ Y_UNIT_TEST (RestoreReplicationWithoutSecret) {
1549
+ TKikimrWithGrpcAndRootSchema server;
1550
+
1551
+ const auto endpoint = Sprintf (" localhost:%u" , server.GetPort ());
1552
+ auto driver = TDriver (TDriverConfig ().SetEndpoint (endpoint).SetAuthToken (" root@builtin" ));
1553
+
1554
+ NQuery::TQueryClient queryClient (driver);
1555
+ auto session = queryClient.GetSession ().ExtractValueSync ().GetSession ();
1556
+ NReplication::TReplicationClient replicationClient (driver);
1557
+
1558
+ TTempDir tempDir;
1559
+ const auto & pathToBackup = tempDir.Path ();
1560
+
1561
+ ExecuteQuery (session, " CREATE OBJECT `secret` (TYPE SECRET) WITH (value = 'root@builtin');" , true );
1562
+ ExecuteQuery (session, " CREATE TABLE `/Root/table` (k Uint32, v Utf8, PRIMARY KEY (k));" , true );
1563
+ ExecuteQuery (session, Sprintf (R"(
1564
+ CREATE ASYNC REPLICATION `/Root/replication` FOR
1565
+ `/Root/table` AS `/Root/replica`
1566
+ WITH (
1567
+ CONNECTION_STRING = 'grpc://%s/?database=/Root',
1568
+ TOKEN_SECRET_NAME = 'secret'
1569
+ );)" , endpoint.c_str ()), true
1570
+ );
1571
+ WaitReplicationInit (replicationClient, " /Root/replication" );
1572
+
1573
+ NDump::TClient backupClient (driver);
1574
+ {
1575
+ const auto result = backupClient.Dump (" /Root" , pathToBackup, NDump::TDumpSettings ().Database (" /Root" ));
1576
+ UNIT_ASSERT_C (result.IsSuccess (), result.GetIssues ().ToString ());
1577
+ }
1578
+ ExecuteQuery (session, " DROP OBJECT `secret` (TYPE SECRET);" , true );
1579
+ ExecuteQuery (session, " DROP ASYNC REPLICATION `/Root/replication` CASCADE;" , true );
1580
+ {
1581
+ const auto result = backupClient.Restore (pathToBackup, " /Root" );
1582
+ UNIT_ASSERT_VALUES_EQUAL_C (result.GetStatus (), EStatus::PRECONDITION_FAILED, result.GetIssues ().ToString ());
1583
+ }
1584
+ }
1585
+
1548
1586
void TestExternalDataSourceBackupRestore () {
1549
1587
TKikimrWithGrpcAndRootSchema server;
1550
1588
server.GetRuntime ()->GetAppData ().FeatureFlags .SetEnableExternalDataSources (true );
@@ -1567,6 +1605,45 @@ Y_UNIT_TEST_SUITE(BackupRestore) {
1567
1605
);
1568
1606
}
1569
1607
1608
+ Y_UNIT_TEST (RestoreExternalDataSourceWithoutSecret) {
1609
+ TKikimrWithGrpcAndRootSchema server;
1610
+ server.GetRuntime ()->GetAppData ().FeatureFlags .SetEnableExternalDataSources (true );
1611
+
1612
+ auto driver = TDriver (TDriverConfig ().SetEndpoint (Sprintf (" localhost:%u" , server.GetPort ())));
1613
+ TTableClient tableClient (driver);
1614
+ auto tableSession = tableClient.CreateSession ().ExtractValueSync ().GetSession ();
1615
+
1616
+ NQuery::TQueryClient queryClient (driver);
1617
+ auto querySession = queryClient.GetSession ().ExtractValueSync ().GetSession ();
1618
+
1619
+ TTempDir tempDir;
1620
+ const auto & pathToBackup = tempDir.Path ();
1621
+
1622
+ ExecuteQuery (querySession, " CREATE OBJECT `secret` (TYPE SECRET) WITH (value = 'secret');" , true );
1623
+ ExecuteQuery (querySession, R"(
1624
+ CREATE EXTERNAL DATA SOURCE `/Root/externalDataSource` WITH (
1625
+ SOURCE_TYPE = "PostgreSQL",
1626
+ DATABASE_NAME = "db",
1627
+ LOCATION = "192.168.1.1:8123",
1628
+ AUTH_METHOD = "BASIC",
1629
+ LOGIN = "user",
1630
+ PASSWORD_SECRET_NAME = "secret"
1631
+ );
1632
+ )" , true );
1633
+
1634
+ NDump::TClient backupClient (driver);
1635
+ {
1636
+ const auto result = backupClient.Dump (" /Root" , pathToBackup, NDump::TDumpSettings ().Database (" /Root" ));
1637
+ UNIT_ASSERT_C (result.IsSuccess (), result.GetIssues ().ToString ());
1638
+ }
1639
+ ExecuteQuery (querySession, " DROP OBJECT `secret` (TYPE SECRET);" , true );
1640
+ ExecuteQuery (querySession, " DROP EXTERNAL DATA SOURCE `/Root/externalDataSource`;" , true );
1641
+ {
1642
+ const auto result = backupClient.Restore (pathToBackup, " /Root" );
1643
+ UNIT_ASSERT_VALUES_EQUAL_C (result.GetStatus (), EStatus::PRECONDITION_FAILED, result.GetIssues ().ToString ());
1644
+ }
1645
+ }
1646
+
1570
1647
void TestExternalTableBackupRestore () {
1571
1648
TKikimrWithGrpcAndRootSchema server;
1572
1649
server.GetRuntime ()->GetAppData ().FeatureFlags .SetEnableExternalDataSources (true );
0 commit comments