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  }