@@ -95,6 +95,66 @@ func TestSelect(t *testing.T) {
9595 equals (t , "bar" , v )
9696}
9797
98+ func TestSwapdb (t * testing.T ) {
99+ s , err := Run ()
100+ ok (t , err )
101+ defer s .Close ()
102+ c , err := redis .Dial ("tcp" , s .Addr ())
103+ ok (t , err )
104+
105+ _ , err = redis .String (c .Do ("SET" , "foo" , "bar" ))
106+ ok (t , err )
107+
108+ _ , err = redis .String (c .Do ("SELECT" , "5" ))
109+ ok (t , err )
110+
111+ _ , err = redis .String (c .Do ("SET" , "foo" , "baz" ))
112+ ok (t , err )
113+
114+ res , err := redis .String (c .Do ("SWAPDB" , "0" , "5" ))
115+ ok (t , err )
116+ equals (t , "OK" , res )
117+
118+ got , err := s .Get ("foo" )
119+ ok (t , err )
120+ equals (t , "baz" , got )
121+ s .Select (5 )
122+ got , err = s .Get ("foo" )
123+ ok (t , err )
124+ equals (t , "bar" , got )
125+
126+ // Another connection should have its own idea of the db:
127+ c2 , err := redis .Dial ("tcp" , s .Addr ())
128+ ok (t , err )
129+ v , err := redis .String (c2 .Do ("GET" , "foo" ))
130+ ok (t , err )
131+ equals (t , "baz" , v )
132+
133+ // errors
134+ {
135+ _ , err := redis .String (c .Do ("SWAPDB" ))
136+ mustFail (t , err , errWrongNumber ("SWAPDB" ))
137+
138+ _ , err = redis .String (c .Do ("SWAPDB" , 1 , 2 , 3 ))
139+ mustFail (t , err , errWrongNumber ("SWAPDB" ))
140+
141+ _ , err = redis .String (c .Do ("SWAPDB" , "foo" , 2 ))
142+ mustFail (t , err , "ERR invalid first DB index" )
143+
144+ _ , err = redis .String (c .Do ("SWAPDB" , 1 , "bar" ))
145+ mustFail (t , err , "ERR invalid second DB index" )
146+
147+ _ , err = redis .String (c .Do ("SWAPDB" , "foo" , "bar" ))
148+ mustFail (t , err , "ERR invalid first DB index" )
149+
150+ _ , err = redis .String (c .Do ("SWAPDB" , - 1 , 2 ))
151+ mustFail (t , err , "ERR DB index is out of range" )
152+
153+ _ , err = redis .String (c .Do ("SWAPDB" , 1 , - 2 ))
154+ mustFail (t , err , "ERR DB index is out of range" )
155+ }
156+ }
157+
98158func TestQuit (t * testing.T ) {
99159 s , err := Run ()
100160 ok (t , err )
0 commit comments