File: rpl_ssl1.test

package info (click to toggle)
mysql-8.0 8.0.43-3
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 1,273,924 kB
  • sloc: cpp: 4,684,605; ansic: 412,450; pascal: 108,398; java: 83,641; perl: 30,221; cs: 27,067; sql: 26,594; sh: 24,181; python: 21,816; yacc: 17,169; php: 11,522; xml: 7,388; javascript: 7,076; makefile: 2,194; lex: 1,075; awk: 670; asm: 520; objc: 183; ruby: 97; lisp: 86
file content (167 lines) | stat: -rw-r--r-- 5,673 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
--source include/not_group_replication_plugin.inc
source include/master-slave.inc;

# We don't test all types of ssl auth params here since it's a bit hard 
# until problems with OpenSSL 0.9.7 are unresolved

# creating replication user for whom ssl auth is required
# preparing playground
connection master;
SET SQL_LOG_BIN= 0;
create user replssl@localhost require ssl;
grant replication slave on *.* to replssl@localhost;
SET SQL_LOG_BIN= 1;
create table t1 (t int);

--source include/sync_slave_sql_with_master.inc

#trying to use this user without ssl
stop slave;
--source include/wait_for_slave_to_stop.inc
--replace_column 2 ####
CHANGE REPLICATION SOURCE to SOURCE_USER='replssl',SOURCE_PASSWORD='';
start slave;

#showing that replication don't work
--let $slave_io_errno= convert_error(ER_ACCESS_DENIED_ERROR)
--source include/wait_for_slave_io_error.inc
--source include/stop_slave_sql.inc

#showing that replication could work with ssl params
--replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR
--replace_column 2 ####
eval CHANGE REPLICATION SOURCE to SOURCE_SSL=1 , SOURCE_SSL_CA ='$MYSQL_TEST_DIR/std_data/cacert.pem', SOURCE_SSL_CERT='$MYSQL_TEST_DIR/std_data/client-cert.pem', SOURCE_SSL_KEY='$MYSQL_TEST_DIR/std_data/client-key.pem', SOURCE_TLS_VERSION='TLSv1.2';
start slave;
--source include/wait_for_slave_to_start.inc

#avoiding unneeded sleeps
connection master;
insert into t1 values (1);
--source include/sync_slave_sql_with_master.inc

#checking that replication is ok
select * from t1;

#checking show slave status
let $status_items= Master_SSL_Allowed, Master_SSL_CA_Path, Master_SSL_CA_File, Master_SSL_Cert, Master_SSL_Key, Master_TLS_Version;
source include/show_slave_status.inc;
source include/check_slave_is_running.inc;

#checking if replication works without ssl also performing clean up
stop slave;
--source include/wait_for_slave_to_stop.inc
--replace_column 2 ####
CHANGE REPLICATION SOURCE to SOURCE_USER='root',SOURCE_PASSWORD='', SOURCE_SSL=0;
start slave;
--source include/wait_for_slave_to_start.inc
connection master;
SET SQL_LOG_BIN= 0;
drop user replssl@localhost;
SET SQL_LOG_BIN= 1;
drop table t1;

--source include/sync_slave_sql_with_master.inc
source include/show_slave_status.inc;
source include/check_slave_is_running.inc;
# End of 4.1 tests

# Start replication with ssl_verify_server_cert turned on
connection slave;
stop slave;
--source include/wait_for_slave_to_stop.inc
--replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR
--replace_column 2 ####
eval CHANGE REPLICATION SOURCE to
 SOURCE_HOST="localhost",
 SOURCE_SSL=1 ,
 SOURCE_SSL_CA ='$MYSQL_TEST_DIR/std_data/cacert.pem',
 SOURCE_SSL_CERT='$MYSQL_TEST_DIR/std_data/client-cert.pem',
 SOURCE_SSL_KEY='$MYSQL_TEST_DIR/std_data/client-key.pem',
 SOURCE_SSL_VERIFY_SERVER_CERT=1;
start slave;
--source include/wait_for_slave_to_start.inc

connection master;
create table t1 (t int);
insert into t1 values (1);

--source include/sync_slave_sql_with_master.inc

echo on slave;
#checking that replication is ok
select * from t1;

#checking show slave status
source include/show_slave_status.inc;
--source include/check_slave_is_running.inc

# ==== Clean up ====

connection master;
drop table t1;
--source include/sync_slave_sql_with_master.inc

###############################################################################
# BUG#18778485 SSL_VERIFY_SERVER_CERT AUTOMATICALLY SETS TO NO POST RESET SLAVE
#              COMMAND
#
# Due to the buggy behaviour, a RESET SLAVE command on the slave server
# reset ssl_verify_server_cert= 0. RESET SLAVE is generally expected to
# delete slave logs and forget the replicaiton positions. This erroneous
# behavior was therefore counterintuitive.
#
# We test the following:
# - The behaviour of ssl_verify_server_cert with RESET SLAVE.
# - Test that neither of STOP SLAVE or START SLAVE affects the value of
#   ssl_verify_server_cert.
# - Test that CHANGE MASTER with no ssl_verify_server_cert option doesnt
#   affect ssl_verify_server_cert value.
##############################################################################

--source include/stop_slave.inc

--let $assert_cond= "[SHOW SLAVE STATUS, Master_SSL_Verify_Server_Cert, 1]" = "Yes"
--let $assert_text= Master_SSL_Verify_Server_Cert should NOT change on STOP SLAVE.
--source include/assert.inc

--let $log_file= query_get_value(SHOW SLAVE STATUS, Master_Log_File, 1)
--let $log_pos= query_get_value(SHOW SLAVE STATUS, Read_Master_Log_Pos, 1)

RESET SLAVE;

--let $assert_cond= "[SHOW SLAVE STATUS, Master_SSL_Verify_Server_Cert, 1]" = "Yes"
--let $assert_text= Master_SSL_Verify_Server_Cert should NOT change on RESET SLAVE.
--source include/assert.inc

--replace_result $MASTER_MYPORT MASTER_MYPORT
--eval CHANGE REPLICATION SOURCE TO SOURCE_PORT= $MASTER_MYPORT

--let $assert_cond= "[SHOW SLAVE STATUS, Master_SSL_Verify_Server_Cert, 1]" = "Yes"
--let $assert_text= Master_SSL_Verify_Server_Cert should NOT change on CHANGE MASTER.
--source include/assert.inc

--source include/start_slave.inc
--let $assert_cond= "[SHOW SLAVE STATUS, Master_SSL_Verify_Server_Cert, 1]" = "Yes"
--let $assert_text= Master_SSL_Verify_Server_Cert should NOT change on START SLAVE.
--source include/assert.inc

--connection master
--disable_warnings
DROP TABLE IF EXISTS t1;
--source include/sync_slave_sql_with_master.inc
--enable_warnings

--source include/stop_slave.inc
# Clean change master options.
--replace_column 2 ####
CHANGE REPLICATION SOURCE TO
 SOURCE_HOST="127.0.0.1",
 SOURCE_SSL_CA ='',
 SOURCE_SSL_CERT='',
 SOURCE_SSL_KEY='',
 SOURCE_SSL_VERIFY_SERVER_CERT=0,
 SOURCE_SSL=0,
 SOURCE_TLS_VERSION='';

--let $rpl_only_running_threads= 1
--source include/rpl_end.inc