@@ -26,6 +26,7 @@ import (
26
26
"github.com/rudderlabs/rudder-go-kit/stats"
27
27
kithelper "github.com/rudderlabs/rudder-go-kit/testhelper"
28
28
"github.com/rudderlabs/rudder-go-kit/testhelper/docker/resource/postgres"
29
+
29
30
backendconfig "github.com/rudderlabs/rudder-server/backend-config"
30
31
"github.com/rudderlabs/rudder-server/runner"
31
32
th "github.com/rudderlabs/rudder-server/testhelper"
@@ -1041,6 +1042,113 @@ func TestIntegration(t *testing.T) {
1041
1042
})
1042
1043
}
1043
1044
1045
+ func TestRedshift_ShouldMerge (t * testing.T ) {
1046
+ testCases := []struct {
1047
+ name string
1048
+ preferAppend bool
1049
+ tableName string
1050
+ appendOnlyTables []string
1051
+ uploaderCanAppend bool
1052
+ expected bool
1053
+ }{
1054
+ {
1055
+ name : "uploader says we can append and user prefers append" ,
1056
+ preferAppend : true ,
1057
+ uploaderCanAppend : true ,
1058
+ tableName : "tracks" ,
1059
+ expected : false ,
1060
+ },
1061
+ {
1062
+ name : "uploader says we cannot append and user prefers append" ,
1063
+ preferAppend : true ,
1064
+ uploaderCanAppend : false ,
1065
+ tableName : "tracks" ,
1066
+ expected : true ,
1067
+ },
1068
+ {
1069
+ name : "uploader says we can append and user prefers not to append" ,
1070
+ preferAppend : false ,
1071
+ uploaderCanAppend : true ,
1072
+ tableName : "tracks" ,
1073
+ expected : true ,
1074
+ },
1075
+ {
1076
+ name : "uploader says we cannot append and user prefers not to append" ,
1077
+ preferAppend : false ,
1078
+ uploaderCanAppend : false ,
1079
+ tableName : "tracks" ,
1080
+ expected : true ,
1081
+ },
1082
+ {
1083
+ name : "uploader says we can append, in merge mode, but table is in append only" ,
1084
+ preferAppend : false ,
1085
+ uploaderCanAppend : true ,
1086
+ tableName : "tracks" ,
1087
+ appendOnlyTables : []string {"tracks" },
1088
+ expected : false ,
1089
+ },
1090
+ {
1091
+ name : "uploader says we can append, in append mode, but table is in append only" ,
1092
+ preferAppend : true ,
1093
+ uploaderCanAppend : true ,
1094
+ tableName : "tracks" ,
1095
+ appendOnlyTables : []string {"tracks" },
1096
+ expected : false ,
1097
+ },
1098
+ {
1099
+ name : "uploader says we can append, in append mode, but table is not in append only" ,
1100
+ preferAppend : true ,
1101
+ uploaderCanAppend : true ,
1102
+ tableName : "page_views" ,
1103
+ appendOnlyTables : []string {"tracks" },
1104
+ expected : false ,
1105
+ },
1106
+ {
1107
+ name : "uploader says we cannot append, in merge mode, but table is in append only" ,
1108
+ preferAppend : false ,
1109
+ uploaderCanAppend : false ,
1110
+ tableName : "tracks" ,
1111
+ appendOnlyTables : []string {"tracks" },
1112
+ expected : false ,
1113
+ },
1114
+ {
1115
+ name : "uploader says we can append, in merge mode, but table is not in append only" ,
1116
+ preferAppend : false ,
1117
+ uploaderCanAppend : true ,
1118
+ tableName : "page_views" ,
1119
+ appendOnlyTables : []string {"tracks" },
1120
+ expected : true ,
1121
+ },
1122
+ }
1123
+
1124
+ for _ , tc := range testCases {
1125
+ t .Run (tc .name , func (t * testing.T ) {
1126
+ destID := "test_destination_id"
1127
+
1128
+ c := config .New ()
1129
+ c .Set ("Warehouse.redshift.appendOnlyTables." + destID , tc .appendOnlyTables )
1130
+
1131
+ rs := redshift .New (c , logger .NOP , stats .NOP )
1132
+
1133
+ rs .Warehouse = model.Warehouse {
1134
+ Destination : backendconfig.DestinationT {
1135
+ ID : destID ,
1136
+ Config : map [string ]any {
1137
+ model .PreferAppendSetting .String (): tc .preferAppend ,
1138
+ },
1139
+ },
1140
+ }
1141
+
1142
+ mockCtrl := gomock .NewController (t )
1143
+ uploader := mockuploader .NewMockUploader (mockCtrl )
1144
+ uploader .EXPECT ().CanAppend ().AnyTimes ().Return (tc .uploaderCanAppend )
1145
+
1146
+ rs .Uploader = uploader
1147
+ require .Equal (t , rs .ShouldMerge (tc .tableName ), tc .expected )
1148
+ })
1149
+ }
1150
+ }
1151
+
1044
1152
func TestCheckAndIgnoreColumnAlreadyExistError (t * testing.T ) {
1045
1153
testCases := []struct {
1046
1154
name string
0 commit comments