@@ -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