@@ -133,7 +133,7 @@ func TestTelemetry(t *testing.T) {
133
133
})
134
134
_ = dbgen .WorkspaceModule (t , db , database.WorkspaceModule {
135
135
JobID : pj .ID ,
136
- Source : "internal-url.com/some-module" ,
136
+ Source : "https:// internal-url.com/some-module" ,
137
137
Version : "1.0.0" ,
138
138
})
139
139
_ , snapshot := collectSnapshot (t , db , nil )
@@ -142,10 +142,89 @@ func TestTelemetry(t *testing.T) {
142
142
sort .Slice (modules , func (i , j int ) bool {
143
143
return modules [i ].Source < modules [j ].Source
144
144
})
145
- require .Equal (t , modules [0 ].Source , "921c61d6f3eef5118f3cae658d1518b378c5b02a4955a766c791440894d989c5 " )
145
+ require .Equal (t , modules [0 ].Source , "ed662ec0396db67e77119f14afcb9253574cc925b04a51d4374bcb1eae299f5d " )
146
146
require .Equal (t , modules [0 ].Version , "92521fc3cbd964bdc9f584a991b89fddaa5754ed1cc96d6d42445338669c1305" )
147
+ require .Equal (t , modules [0 ].SourceType , telemetry .ModuleSourceTypeHTTP )
147
148
require .Equal (t , modules [1 ].Source , "registry.coder.com/terraform/aws" )
148
149
require .Equal (t , modules [1 ].Version , "1.0.0" )
150
+ require .Equal (t , modules [1 ].SourceType , telemetry .ModuleSourceTypeCoderRegistry )
151
+ })
152
+ t .Run ("ModuleSourceType" , func (t * testing.T ) {
153
+ t .Parallel ()
154
+ cases := []struct {
155
+ source string
156
+ want telemetry.ModuleSourceType
157
+ }{
158
+ // Local relative paths
159
+ {source : "./modules/terraform-aws-vpc" , want : telemetry .ModuleSourceTypeLocal },
160
+ {source : "../shared/modules/vpc" , want : telemetry .ModuleSourceTypeLocal },
161
+ {source : " ./my-module " , want : telemetry .ModuleSourceTypeLocal }, // with whitespace
162
+
163
+ // Local absolute paths
164
+ {source : "/opt/terraform/modules/vpc" , want : telemetry .ModuleSourceTypeLocalAbs },
165
+ {source : "/Users/dev/modules/app" , want : telemetry .ModuleSourceTypeLocalAbs },
166
+ {source : "/etc/terraform/modules/network" , want : telemetry .ModuleSourceTypeLocalAbs },
167
+
168
+ // Public registry
169
+ {source : "hashicorp/consul/aws" , want : telemetry .ModuleSourceTypePublicRegistry },
170
+ {source : "registry.terraform.io/hashicorp/aws" , want : telemetry .ModuleSourceTypePublicRegistry },
171
+ {source : "terraform-aws-modules/vpc/aws" , want : telemetry .ModuleSourceTypePublicRegistry },
172
+ {source : "hashicorp/consul/aws//modules/consul-cluster" , want : telemetry .ModuleSourceTypePublicRegistry },
173
+ {source : "hashicorp/co-nsul/aw_s//modules/consul-cluster" , want : telemetry .ModuleSourceTypePublicRegistry },
174
+
175
+ // Private registry
176
+ {source : "app.terraform.io/company/vpc/aws" , want : telemetry .ModuleSourceTypePrivateRegistry },
177
+ {source : "localterraform.com/org/module" , want : telemetry .ModuleSourceTypePrivateRegistry },
178
+ {source : "APP.TERRAFORM.IO/test/module" , want : telemetry .ModuleSourceTypePrivateRegistry }, // case insensitive
179
+
180
+ // Coder registry
181
+ {source : "registry.coder.com/terraform/aws" , want : telemetry .ModuleSourceTypeCoderRegistry },
182
+ {source : "registry.coder.com/modules/base" , want : telemetry .ModuleSourceTypeCoderRegistry },
183
+ {source : "REGISTRY.CODER.COM/test/module" , want : telemetry .ModuleSourceTypeCoderRegistry }, // case insensitive
184
+
185
+ // GitHub
186
+ {source : "github.com/hashicorp/terraform-aws-vpc" , want : telemetry .ModuleSourceTypeGitHub },
187
+ {source : "git::https://github.com/org/repo.git" , want : telemetry .ModuleSourceTypeGitHub },
188
+ {source : "git::https://github.com/org/repo//modules/vpc" , want : telemetry .ModuleSourceTypeGitHub },
189
+
190
+ // Bitbucket
191
+ {source : "bitbucket.org/hashicorp/terraform-aws-vpc" , want : telemetry .ModuleSourceTypeBitbucket },
192
+ {source : "git::https://bitbucket.org/org/repo.git" , want : telemetry .ModuleSourceTypeBitbucket },
193
+ {source : "https://bitbucket.org/org/repo//modules/vpc" , want : telemetry .ModuleSourceTypeBitbucket },
194
+
195
+ // Generic Git
196
+ {source : "git::ssh://git.internal.com/repo.git" , want : telemetry .ModuleSourceTypeGit },
197
+ {source : "git@gitlab.com:org/repo.git" , want : telemetry .ModuleSourceTypeGit },
198
+ {source : "git::https://git.internal.com/repo.git?ref=v1.0.0" , want : telemetry .ModuleSourceTypeGit },
199
+
200
+ // Mercurial
201
+ {source : "hg::https://example.com/vpc.hg" , want : telemetry .ModuleSourceTypeMercurial },
202
+ {source : "hg::http://example.com/vpc.hg" , want : telemetry .ModuleSourceTypeMercurial },
203
+ {source : "hg::ssh://example.com/vpc.hg" , want : telemetry .ModuleSourceTypeMercurial },
204
+
205
+ // HTTP
206
+ {source : "https://example.com/vpc-module.zip" , want : telemetry .ModuleSourceTypeHTTP },
207
+ {source : "http://example.com/modules/vpc" , want : telemetry .ModuleSourceTypeHTTP },
208
+ {source : "https://internal.network/terraform/modules" , want : telemetry .ModuleSourceTypeHTTP },
209
+
210
+ // S3
211
+ {source : "s3::https://s3-eu-west-1.amazonaws.com/bucket/vpc" , want : telemetry .ModuleSourceTypeS3 },
212
+ {source : "s3::https://bucket.s3.amazonaws.com/vpc" , want : telemetry .ModuleSourceTypeS3 },
213
+ {source : "s3::http://bucket.s3.amazonaws.com/vpc?version=1" , want : telemetry .ModuleSourceTypeS3 },
214
+
215
+ // GCS
216
+ {source : "gcs::https://www.googleapis.com/storage/v1/bucket/vpc" , want : telemetry .ModuleSourceTypeGCS },
217
+ {source : "gcs::https://storage.googleapis.com/bucket/vpc" , want : telemetry .ModuleSourceTypeGCS },
218
+ {source : "gcs::https://bucket.storage.googleapis.com/vpc" , want : telemetry .ModuleSourceTypeGCS },
219
+
220
+ // Unknown
221
+ {source : "custom://example.com/vpc" , want : telemetry .ModuleSourceTypeUnknown },
222
+ {source : "something-random" , want : telemetry .ModuleSourceTypeUnknown },
223
+ {source : "" , want : telemetry .ModuleSourceTypeUnknown },
224
+ }
225
+ for _ , c := range cases {
226
+ require .Equal (t , c .want , telemetry .GetModuleSourceType (c .source ))
227
+ }
149
228
})
150
229
}
151
230
0 commit comments