mirror of
				https://github.com/XRPLF/clio.git
				synced 2025-11-04 11:55:51 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			120 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			120 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package parse_args
 | 
						|
 | 
						|
import (
 | 
						|
	"flag"
 | 
						|
	"fmt"
 | 
						|
	"os"
 | 
						|
	"reflect"
 | 
						|
	"testing"
 | 
						|
)
 | 
						|
 | 
						|
func TestParse(t *testing.T) {
 | 
						|
	tests := []struct {
 | 
						|
		name       string
 | 
						|
		args       []string
 | 
						|
		want       *Args
 | 
						|
		expectErr  bool
 | 
						|
		errMessage string
 | 
						|
	}{
 | 
						|
		{
 | 
						|
			name: "Valid export full mode",
 | 
						|
			args: []string{"cmd", "--export=full", "--start_seq=1", "--end_seq=10", "--path=/data", "--grpc_server=localhost:50051"},
 | 
						|
			want: &Args{
 | 
						|
				ExportMode: "full",
 | 
						|
				StartSeq:   1,
 | 
						|
				EndSeq:     10,
 | 
						|
				Path:       "/data",
 | 
						|
				GrpcServer: "localhost:50051",
 | 
						|
				WsServer:   "0.0.0.0:6006",
 | 
						|
				ServerMode: false,
 | 
						|
			},
 | 
						|
			expectErr: false,
 | 
						|
		},
 | 
						|
		{
 | 
						|
			name:       "Missing required flags in export mode",
 | 
						|
			args:       []string{"cmd", "--export=delta", "--start_seq=1"},
 | 
						|
			want:       nil,
 | 
						|
			expectErr:  true,
 | 
						|
			errMessage: "invalid usage: --start_seq, --end_seq, --grpc_server and --path are required for export",
 | 
						|
		},
 | 
						|
		{
 | 
						|
			name:       "Invalid export mode",
 | 
						|
			args:       []string{"cmd", "--export=invalid"},
 | 
						|
			want:       nil,
 | 
						|
			expectErr:  true,
 | 
						|
			errMessage: "invalid usage: Invalid export mode. Use 'full' or 'delta'",
 | 
						|
		},
 | 
						|
		{
 | 
						|
			name: "Server mode with default grpc server flags",
 | 
						|
			args: []string{"cmd", "--server", "--path=/server_data"},
 | 
						|
			want: &Args{
 | 
						|
				ServerMode: true,
 | 
						|
				StartSeq:   0,
 | 
						|
				EndSeq:     0,
 | 
						|
				Path:       "/server_data",
 | 
						|
				GrpcServer: "0.0.0.0:50051",
 | 
						|
				WsServer:   "0.0.0.0:6006",
 | 
						|
			},
 | 
						|
			expectErr: false,
 | 
						|
		},
 | 
						|
		{
 | 
						|
			name:       "Server mode with empty grpc server flag",
 | 
						|
			args:       []string{"cmd", "--server", "--grpc_server=", "--path=/server_data"},
 | 
						|
			want:       nil,
 | 
						|
			expectErr:  true,
 | 
						|
			errMessage: "invalid usage: --grpc_server and --ws_server and --path are required for server mode",
 | 
						|
		},
 | 
						|
		{
 | 
						|
			name:       "Server and export mode together (error)",
 | 
						|
			args:       []string{"cmd", "--server", "--export=full"},
 | 
						|
			want:       nil,
 | 
						|
			expectErr:  true,
 | 
						|
			errMessage: "invalid usage: --server and --export cannot be used at the same time",
 | 
						|
		},
 | 
						|
		{
 | 
						|
			name:       "Show range without path",
 | 
						|
			args:       []string{"cmd", "--range"},
 | 
						|
			want:       nil,
 | 
						|
			expectErr:  true,
 | 
						|
			errMessage: "invalid usage: --path is required for show range",
 | 
						|
		},
 | 
						|
		{
 | 
						|
			name: "Show range",
 | 
						|
			args: []string{"cmd", "--range", "--path=/range_data"},
 | 
						|
			want: &Args{
 | 
						|
				ShowRange:  true,
 | 
						|
				Path:       "/range_data",
 | 
						|
				GrpcServer: "0.0.0.0:50051",
 | 
						|
				WsServer:   "0.0.0.0:6006",
 | 
						|
			},
 | 
						|
			expectErr: false,
 | 
						|
		},
 | 
						|
	}
 | 
						|
 | 
						|
	for _, tt := range tests {
 | 
						|
		t.Run(tt.name, func(t *testing.T) {
 | 
						|
			flag.CommandLine = flag.NewFlagSet(os.Args[1], flag.ExitOnError)
 | 
						|
 | 
						|
			os.Args = tt.args
 | 
						|
 | 
						|
			fmt.Println("Running test with args:", tt.args)
 | 
						|
			got, err := Parse()
 | 
						|
 | 
						|
			if tt.expectErr {
 | 
						|
				if err == nil {
 | 
						|
					t.Errorf("Expected error but got none")
 | 
						|
				} else if err.Error() != tt.errMessage {
 | 
						|
					t.Errorf("Expected error message '%s', got '%s'", tt.errMessage, err.Error())
 | 
						|
				}
 | 
						|
			} else {
 | 
						|
				if err != nil {
 | 
						|
					t.Errorf("Unexpected error: %v", err)
 | 
						|
				}
 | 
						|
				if !reflect.DeepEqual(got, tt.want) {
 | 
						|
					t.Errorf("Expected %+v, got %+v", tt.want, got)
 | 
						|
				}
 | 
						|
			}
 | 
						|
		})
 | 
						|
	}
 | 
						|
}
 |