gitlab.com/Raven-IO/raven-delve@v1.22.4/service/dap/config_test.go (about) 1 package dap 2 3 import ( 4 "testing" 5 ) 6 7 func TestListConfig(t *testing.T) { 8 type args struct { 9 args *launchAttachArgs 10 } 11 tests := []struct { 12 name string 13 args args 14 want string 15 }{ 16 { 17 name: "empty", 18 args: args{ 19 args: &launchAttachArgs{}, 20 }, 21 want: formatConfig(0, false, false, "", []string{}, false, [][2]string{}), 22 }, 23 { 24 name: "default values", 25 args: args{ 26 args: &defaultArgs, 27 }, 28 want: formatConfig(50, false, false, "", []string{}, false, [][2]string{}), 29 }, 30 { 31 name: "custom values", 32 args: args{ 33 args: &launchAttachArgs{ 34 StackTraceDepth: 35, 35 ShowGlobalVariables: true, 36 GoroutineFilters: "SomeFilter", 37 ShowPprofLabels: []string{"SomeLabel"}, 38 substitutePathClientToServer: [][2]string{{"hello", "world"}}, 39 substitutePathServerToClient: [][2]string{{"world", "hello"}}, 40 }, 41 }, 42 want: formatConfig(35, true, false, "SomeFilter", []string{"SomeLabel"}, false, [][2]string{{"hello", "world"}}), 43 }, 44 } 45 for _, tt := range tests { 46 t.Run(tt.name, func(t *testing.T) { 47 if got := listConfig(tt.args.args); got != tt.want { 48 t.Errorf("listConfig() = %v, want %v", got, tt.want) 49 } 50 }) 51 } 52 } 53 54 func TestConfigureSetSubstitutePath(t *testing.T) { 55 type args struct { 56 args *launchAttachArgs 57 rest string 58 } 59 tests := []struct { 60 name string 61 args args 62 wantRules [][2]string 63 wantErr bool 64 }{ 65 // Test add rule. 66 { 67 name: "add rule", 68 args: args{ 69 args: &launchAttachArgs{ 70 substitutePathClientToServer: [][2]string{}, 71 substitutePathServerToClient: [][2]string{}, 72 }, 73 rest: "/path/to/client/dir /path/to/server/dir", 74 }, 75 wantRules: [][2]string{{"/path/to/client/dir", "/path/to/server/dir"}}, 76 wantErr: false, 77 }, 78 { 79 name: "add rule (multiple)", 80 args: args{ 81 args: &launchAttachArgs{ 82 substitutePathClientToServer: [][2]string{ 83 {"/path/to/client/dir/a", "/path/to/server/dir/a"}, 84 {"/path/to/client/dir/b", "/path/to/server/dir/b"}, 85 }, 86 substitutePathServerToClient: [][2]string{ 87 {"/path/to/server/dir/a", "/path/to/client/dir/a"}, 88 {"/path/to/server/dir/b", "/path/to/client/dir/b"}, 89 }, 90 }, 91 rest: "/path/to/client/dir/c /path/to/server/dir/b", 92 }, 93 wantRules: [][2]string{ 94 {"/path/to/client/dir/a", "/path/to/server/dir/a"}, 95 {"/path/to/client/dir/b", "/path/to/server/dir/b"}, 96 {"/path/to/client/dir/c", "/path/to/server/dir/b"}, 97 }, 98 wantErr: false, 99 }, 100 { 101 name: "add rule from empty string", 102 args: args{ 103 args: &launchAttachArgs{ 104 substitutePathClientToServer: [][2]string{}, 105 substitutePathServerToClient: [][2]string{}, 106 }, 107 rest: `"" /path/to/client/dir`, 108 }, 109 wantRules: [][2]string{{"", "/path/to/client/dir"}}, 110 wantErr: false, 111 }, 112 { 113 name: "add rule to empty string", 114 args: args{ 115 args: &launchAttachArgs{ 116 substitutePathClientToServer: [][2]string{}, 117 substitutePathServerToClient: [][2]string{}, 118 }, 119 rest: `/path/to/client/dir ""`, 120 }, 121 wantRules: [][2]string{{"/path/to/client/dir", ""}}, 122 wantErr: false, 123 }, 124 { 125 name: "add rule from empty string(multiple)", 126 args: args{ 127 args: &launchAttachArgs{ 128 substitutePathClientToServer: [][2]string{ 129 {"/path/to/client/dir/a", "/path/to/server/dir/a"}, 130 {"/path/to/client/dir/b", "/path/to/server/dir/b"}, 131 }, 132 substitutePathServerToClient: [][2]string{ 133 {"/path/to/server/dir/a", "/path/to/client/dir/a"}, 134 {"/path/to/server/dir/b", "/path/to/client/dir/b"}, 135 }, 136 }, 137 rest: `"" /path/to/client/dir/c`, 138 }, 139 wantRules: [][2]string{ 140 {"/path/to/client/dir/a", "/path/to/server/dir/a"}, 141 {"/path/to/client/dir/b", "/path/to/server/dir/b"}, 142 {"", "/path/to/client/dir/c"}, 143 }, 144 wantErr: false, 145 }, 146 { 147 name: "add rule to empty string(multiple)", 148 args: args{ 149 args: &launchAttachArgs{ 150 substitutePathClientToServer: [][2]string{ 151 {"/path/to/client/dir/a", "/path/to/server/dir/a"}, 152 {"/path/to/client/dir/b", "/path/to/server/dir/b"}, 153 }, 154 substitutePathServerToClient: [][2]string{ 155 {"/path/to/server/dir/a", "/path/to/client/dir/a"}, 156 {"/path/to/server/dir/b", "/path/to/client/dir/b"}, 157 }, 158 }, 159 rest: `/path/to/client/dir/c ""`, 160 }, 161 wantRules: [][2]string{ 162 {"/path/to/client/dir/a", "/path/to/server/dir/a"}, 163 {"/path/to/client/dir/b", "/path/to/server/dir/b"}, 164 {"/path/to/client/dir/c", ""}, 165 }, 166 wantErr: false, 167 }, 168 // Test modify rule. 169 { 170 name: "modify rule", 171 args: args{ 172 args: &launchAttachArgs{ 173 substitutePathClientToServer: [][2]string{{"/path/to/client/dir", "/path/to/server/dir"}}, 174 substitutePathServerToClient: [][2]string{{"/path/to/server/dir", "/path/to/client/dir"}}, 175 }, 176 rest: "/path/to/client/dir /new/path/to/server/dir", 177 }, 178 wantRules: [][2]string{{"/path/to/client/dir", "/new/path/to/server/dir"}}, 179 wantErr: false, 180 }, 181 { 182 name: "modify rule with from as empty string", 183 args: args{ 184 args: &launchAttachArgs{ 185 substitutePathClientToServer: [][2]string{{"", "/path/to/server/dir"}}, 186 substitutePathServerToClient: [][2]string{{"/path/to/server/dir", ""}}, 187 }, 188 rest: `"" /new/path/to/server/dir`, 189 }, 190 wantRules: [][2]string{{"", "/new/path/to/server/dir"}}, 191 wantErr: false, 192 }, 193 { 194 name: "modify rule with to as empty string", 195 args: args{ 196 args: &launchAttachArgs{ 197 substitutePathClientToServer: [][2]string{{"/path/to/client/dir", ""}}, 198 substitutePathServerToClient: [][2]string{{"", "/path/to/client/dir"}}, 199 }, 200 rest: `/path/to/client/dir ""`, 201 }, 202 wantRules: [][2]string{{"/path/to/client/dir", ""}}, 203 wantErr: false, 204 }, 205 { 206 name: "modify rule (multiple)", 207 args: args{ 208 args: &launchAttachArgs{ 209 substitutePathClientToServer: [][2]string{ 210 {"/path/to/client/dir/a", "/path/to/server/dir/a"}, 211 {"/path/to/client/dir/b", "/path/to/server/dir/b"}, 212 {"/path/to/client/dir/c", "/path/to/server/dir/b"}, 213 }, 214 substitutePathServerToClient: [][2]string{ 215 {"/path/to/server/dir/a", "/path/to/client/dir/a"}, 216 {"/path/to/server/dir/b", "/path/to/client/dir/b"}, 217 {"/path/to/server/dir/b", "/path/to/client/dir/c"}, 218 }, 219 }, 220 rest: "/path/to/client/dir/b /new/path", 221 }, 222 wantRules: [][2]string{ 223 {"/path/to/client/dir/a", "/path/to/server/dir/a"}, 224 {"/path/to/client/dir/b", "/new/path"}, 225 {"/path/to/client/dir/c", "/path/to/server/dir/b"}, 226 }, 227 wantErr: false, 228 }, 229 { 230 name: "modify rule with from as empty string(multiple)", 231 args: args{ 232 args: &launchAttachArgs{ 233 substitutePathClientToServer: [][2]string{ 234 {"/path/to/client/dir/a", "/path/to/server/dir/a"}, 235 {"", "/path/to/server/dir/b"}, 236 {"/path/to/client/dir/c", "/path/to/server/dir/b"}, 237 }, 238 substitutePathServerToClient: [][2]string{ 239 {"/path/to/server/dir/a", "/path/to/client/dir/a"}, 240 {"/path/to/server/dir/b", ""}, 241 {"/path/to/server/dir/b", "/path/to/client/dir/c"}, 242 }, 243 }, 244 rest: `"" /new/path`, 245 }, 246 wantRules: [][2]string{ 247 {"/path/to/client/dir/a", "/path/to/server/dir/a"}, 248 {"", "/new/path"}, 249 {"/path/to/client/dir/c", "/path/to/server/dir/b"}, 250 }, 251 wantErr: false, 252 }, 253 { 254 name: "modify rule with to as empty string(multiple)", 255 args: args{ 256 args: &launchAttachArgs{ 257 substitutePathClientToServer: [][2]string{ 258 {"/path/to/client/dir/a", "/path/to/server/dir/a"}, 259 {"/path/to/client/dir/b", "/path/to/server/dir/b"}, 260 {"/path/to/client/dir/c", "/path/to/server/dir/b"}, 261 }, 262 substitutePathServerToClient: [][2]string{ 263 {"/path/to/server/dir/a", "/path/to/client/dir/a"}, 264 {"/path/to/server/dir/b", "/path/to/client/dir/b"}, 265 {"/path/to/server/dir/b", "/path/to/client/dir/c"}, 266 }, 267 }, 268 rest: `/path/to/client/dir/b ""`, 269 }, 270 wantRules: [][2]string{ 271 {"/path/to/client/dir/a", "/path/to/server/dir/a"}, 272 {"/path/to/client/dir/b", ""}, 273 {"/path/to/client/dir/c", "/path/to/server/dir/b"}, 274 }, 275 wantErr: false, 276 }, 277 // Test delete rule. 278 { 279 name: "delete rule", 280 args: args{ 281 args: &launchAttachArgs{ 282 substitutePathClientToServer: [][2]string{{"/path/to/client/dir", "/path/to/server/dir"}}, 283 substitutePathServerToClient: [][2]string{{"/path/to/server/dir", "/path/to/client/dir"}}, 284 }, 285 rest: "/path/to/client/dir", 286 }, 287 wantRules: [][2]string{}, 288 wantErr: false, 289 }, 290 { 291 name: "delete rule, empty string", 292 args: args{ 293 args: &launchAttachArgs{ 294 substitutePathClientToServer: [][2]string{{"", "/path/to/server/dir"}}, 295 substitutePathServerToClient: [][2]string{{"/path/to/server/dir", ""}}, 296 }, 297 rest: `""`, 298 }, 299 wantRules: [][2]string{}, 300 wantErr: false, 301 }, 302 // Test invalid input. 303 { 304 name: "error on delete nonexistent rule", 305 args: args{ 306 args: &launchAttachArgs{ 307 substitutePathClientToServer: [][2]string{{"/path/to/client/dir", "/path/to/server/dir"}}, 308 substitutePathServerToClient: [][2]string{{"/path/to/server/dir", "/path/to/client/dir"}}, 309 }, 310 rest: "/path/to/server/dir", 311 }, 312 wantRules: [][2]string{{"/path/to/client/dir", "/path/to/server/dir"}}, 313 wantErr: true, 314 }, 315 } 316 for _, tt := range tests { 317 t.Run(tt.name, func(t *testing.T) { 318 err := configureSetSubstitutePath(tt.args.args, tt.args.rest) 319 if (err != nil) != tt.wantErr { 320 t.Errorf("configureSetSubstitutePath() error = %v, wantErr %v", err, tt.wantErr) 321 return 322 } 323 if len(tt.args.args.substitutePathClientToServer) != len(tt.wantRules) { 324 t.Errorf("configureSetSubstitutePath() got substitutePathClientToServer=%v, want %d rules", tt.args.args.substitutePathClientToServer, len(tt.wantRules)) 325 return 326 } 327 gotClient2Server := tt.args.args.substitutePathClientToServer 328 gotServer2Client := tt.args.args.substitutePathServerToClient 329 for i, rule := range tt.wantRules { 330 if gotClient2Server[i][0] != rule[0] || gotClient2Server[i][1] != rule[1] { 331 t.Errorf("configureSetSubstitutePath() got substitutePathClientToServer[%d]=%#v,\n want %#v rules", i, gotClient2Server[i], rule) 332 } 333 if gotServer2Client[i][1] != rule[0] || gotServer2Client[i][0] != rule[1] { 334 reverseRule := [2]string{rule[1], rule[0]} 335 t.Errorf("configureSetSubstitutePath() got substitutePathServerToClient[%d]=%#v,\n want %#v rules", i, gotClient2Server[i], reverseRule) 336 } 337 } 338 }) 339 } 340 }