Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitaae5463

Browse files
committed
Add test to check server-side validation occurs
Signed-off-by: Danny Kopping <danny@coder.com>
1 parentdb609ae commitaae5463

File tree

3 files changed

+81
-1
lines changed

3 files changed

+81
-1
lines changed

‎cli/update_test.go

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -710,6 +710,71 @@ func TestUpdateValidateRichParameters(t *testing.T) {
710710
<-doneChan
711711
})
712712

713+
t.Run("ParameterOptionFailsMonotonicValidation",func(t*testing.T) {
714+
t.Parallel()
715+
716+
// Create template and workspace
717+
client:=coderdtest.New(t,&coderdtest.Options{IncludeProvisionerDaemon:true})
718+
owner:=coderdtest.CreateFirstUser(t,client)
719+
member,_:=coderdtest.CreateAnotherUser(t,client,owner.OrganizationID)
720+
721+
consttempVal="2"
722+
723+
templateParameters:= []*proto.RichParameter{
724+
{Name:numberParameterName,Type:"number",Mutable:true,Required:true,Options: []*proto.RichParameterOption{
725+
{Name:"First option",Description:"This is first option",Value:"1"},
726+
{Name:"Second option",Description:"This is second option",Value:tempVal},
727+
{Name:"Third option",Description:"This is third option",Value:"3"},
728+
},ValidationMonotonic:string(codersdk.MonotonicOrderDecreasing)},
729+
}
730+
version:=coderdtest.CreateTemplateVersion(t,client,owner.OrganizationID,prepareEchoResponses(templateParameters))
731+
coderdtest.AwaitTemplateVersionJobCompleted(t,client,version.ID)
732+
template:=coderdtest.CreateTemplate(t,client,owner.OrganizationID,version.ID)
733+
734+
// Create new workspace
735+
inv,root:=clitest.New(t,"create","my-workspace","--yes","--template",template.Name,"--parameter",fmt.Sprintf("%s=%s",numberParameterName,tempVal))
736+
clitest.SetupConfig(t,member,root)
737+
ptytest.New(t).Attach(inv)
738+
err:=inv.Run()
739+
require.NoError(t,err)
740+
741+
// Update the template to only include a higher value than what was selected, to trigger a validation failure.
742+
updatedTemplateParameters:= []*proto.RichParameter{
743+
{Name:numberParameterName,Type:"number",Mutable:true,Required:true,Options: []*proto.RichParameterOption{
744+
{Name:"Third option",Description:"This is third option",Value:"3"},
745+
},ValidationMonotonic:string(codersdk.MonotonicOrderDecreasing)},
746+
}
747+
748+
updatedVersion:=coderdtest.UpdateTemplateVersion(t,client,owner.OrganizationID,prepareEchoResponses(updatedTemplateParameters),template.ID)
749+
coderdtest.AwaitTemplateVersionJobCompleted(t,client,updatedVersion.ID)
750+
err=client.UpdateActiveTemplateVersion(context.Background(),template.ID, codersdk.UpdateActiveTemplateVersion{
751+
ID:updatedVersion.ID,
752+
})
753+
require.NoError(t,err)
754+
755+
// Update the workspace
756+
inv,root=clitest.New(t,"update","my-workspace")
757+
clitest.SetupConfig(t,member,root)
758+
759+
ctx,cancel:=context.WithTimeout(context.Background(),testutil.WaitMedium)
760+
defercancel()
761+
762+
testutil.Eventually(ctx,t,func(ctx context.Context) (donebool) {
763+
doneChan:=make(chanstruct{})
764+
gofunc() {
765+
deferclose(doneChan)
766+
err:=inv.Run()
767+
768+
// TODO: improve validation so we catch this problem before it reaches the server
769+
// but for now just validate that the server actually catches invalid monotonicity
770+
assert.ErrorContains(t,err,fmt.Sprintf("parameter value must be equal or lower than previous value: %s",tempVal))
771+
}()
772+
773+
<-doneChan
774+
returntrue
775+
},testutil.IntervalFast,"failed to find matching error in time")
776+
})
777+
713778
t.Run("ImmutableRequiredParameterExists_MutableRequiredParameterAdded",func(t*testing.T) {
714779
t.Parallel()
715780

‎go.mod

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ require (
9696
github.com/coder/flogv1.1.0
9797
github.com/coder/prettyv0.0.0-20230908205945-e89ba86370e0
9898
github.com/coder/retryv1.5.1
99-
github.com/coder/terraform-provider-coderv0.18.0
99+
github.com/coder/terraform-provider-coderv0.19.0
100100
github.com/coder/wgtunnelv0.1.13-0.20231127054351-578bfff9b92a
101101
github.com/coreos/go-oidc/v3v3.9.0
102102
github.com/coreos/go-systemdv0.0.0-20191104093116-d3cd4ed1dbcf
@@ -215,7 +215,11 @@ require (
215215
require (
216216
github.com/DataDog/go-libddwaf/v2v2.3.1// indirect
217217
github.com/aws/aws-sdk-go-v2/service/internal/accept-encodingv1.11.1// indirect
218+
github.com/hashicorp/go-pluginv1.4.4// indirect
219+
github.com/hashicorp/terraform-registry-addressv0.0.0-20220623143253-7d51757b572c// indirect
220+
github.com/hashicorp/terraform-svchostv0.0.0-20200729002733-f050f53b9734// indirect
218221
github.com/mitchellh/hashstructurev1.1.0// indirect
222+
github.com/oklog/runv1.0.0// indirect
219223
github.com/pion/transport/v2v2.0.0// indirect
220224
github.com/tdewolff/testv1.0.11-0.20240106005702-7de5f7df4739// indirect
221225
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttpv0.49.0// indirect

‎go.sum

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
cdr.dev/slogv1.6.2-0.20240126064726-20367d4aede6 h1:KHblWIE/KHOwQ6lEbMZt6YpcGve2FEZ1sDtrW1Am5UI=
22
cdr.dev/slogv1.6.2-0.20240126064726-20367d4aede6/go.mod h1:NaoTA7KwopCrnaSb0JXTC0PTp/O/Y83Lndnq0OEV3ZQ=
33
cloud.google.com/gov0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
4+
cloud.google.com/gov0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
45
cloud.google.com/go/computev1.23.4 h1:EBT9Nw4q3zyE7G45Wvv3MzolIrCJEuHys5muLY0wvAw=
56
cloud.google.com/go/computev1.23.4/go.mod h1:/EJMj55asU6kAFnuZET8zqgwgJ9FvXWXOkkfQZa4ioI=
67
cloud.google.com/go/compute/metadatav0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY=
@@ -224,6 +225,8 @@ github.com/coder/tailscale v1.1.1-0.20240214140224-3788ab894ba1 h1:A7dZHNidAVH6K
224225
github.com/coder/tailscalev1.1.1-0.20240214140224-3788ab894ba1/go.mod h1:L8tPrwSi31RAMEMV8rjb0vYTGs7rXt8rAHbqY/p41j4=
225226
github.com/coder/terraform-provider-coderv0.18.0 h1:JWSBsOuzyiCev3C2Aj8Y1dvJkm5JMysIrIylMJtzPAY=
226227
github.com/coder/terraform-provider-coderv0.18.0/go.mod h1:pACHRoXSHBGyY696mLeQ1hR/Ag1G2wFk5bw0mT5Zp2g=
228+
github.com/coder/terraform-provider-coderv0.19.0 h1:mmUXSXcar1h2wgwoHIUwdEKy9Kw0GW7fLO4Vzzf+4R4=
229+
github.com/coder/terraform-provider-coderv0.19.0/go.mod h1:pACHRoXSHBGyY696mLeQ1hR/Ag1G2wFk5bw0mT5Zp2g=
227230
github.com/coder/wgtunnelv0.1.13-0.20231127054351-578bfff9b92a h1:KhR9LUVllMZ+e9lhubZ1HNrtJDgH5YLoTvpKwmrGag4=
228231
github.com/coder/wgtunnelv0.1.13-0.20231127054351-578bfff9b92a/go.mod h1:QzfptVUdEO+XbkzMKx1kw13i9wwpJlfI1RrZ6SNZ0hA=
229232
github.com/coder/wireguard-gov0.0.0-20230807234434-d825b45ccbf5 h1:eDk/42Kj4xN4yfE504LsvcFEo3dWUiCOaBiWJ2uIH2A=
@@ -471,6 +474,7 @@ github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/
471474
github.com/google/go-cmpv0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
472475
github.com/google/go-cmpv0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
473476
github.com/google/go-cmpv0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE=
477+
github.com/google/go-cmpv0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
474478
github.com/google/go-cmpv0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
475479
github.com/google/go-cmpv0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
476480
github.com/google/go-cmpv0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
@@ -516,6 +520,7 @@ github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY
516520
github.com/hashicorp/errwrapv1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
517521
github.com/hashicorp/go-checkpointv0.5.0 h1:MFYpPZCnQqQTE18jFwSII6eUQrD/oxMFp3mlgcqk5mU=
518522
github.com/hashicorp/go-checkpointv0.5.0/go.mod h1:7nfLNL10NsxqO4iWuW6tWW0HjZuDrwkBuEQsVcpCOgg=
523+
github.com/hashicorp/go-cleanhttpv0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80=
519524
github.com/hashicorp/go-cleanhttpv0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ=
520525
github.com/hashicorp/go-cleanhttpv0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48=
521526
github.com/hashicorp/go-ctyv1.4.1-0.20200414143053-d3edf31b6320 h1:1/D3zfFHttUKaCaGKZ/dR2roBXv0vKbSCnssIldfQdI=
@@ -530,6 +535,7 @@ github.com/hashicorp/go-reap v0.0.0-20170704170343-bf58d8a43e7b h1:3GrpnZQBxcMj1
530535
github.com/hashicorp/go-reapv0.0.0-20170704170343-bf58d8a43e7b/go.mod h1:qIFzeFcJU3OIFk/7JreWXcUjFmcCaeHTH9KoNyHYVCs=
531536
github.com/hashicorp/go-uuidv1.0.3 h1:2gKiV6YVmrJ1i2CKKa9obLvRieoRGviZFL26PcT/Co8=
532537
github.com/hashicorp/go-uuidv1.0.3/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
538+
github.com/hashicorp/go-versionv1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=
533539
github.com/hashicorp/go-versionv1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek=
534540
github.com/hashicorp/go-versionv1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=
535541
github.com/hashicorp/golang-lruv1.0.2 h1:dV3g9Z/unq5DpblPpw+Oqcv4dU/1omnb4Ok8iPY6p1c=
@@ -1042,15 +1048,18 @@ golang.org/x/mod v0.16.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
10421048
golang.org/x/netv0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
10431049
golang.org/x/netv0.0.0-20180811021610-c39426892332/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
10441050
golang.org/x/netv0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
1051+
golang.org/x/netv0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
10451052
golang.org/x/netv0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
10461053
golang.org/x/netv0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
10471054
golang.org/x/netv0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
10481055
golang.org/x/netv0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
10491056
golang.org/x/netv0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
1057+
golang.org/x/netv0.0.0-20191009170851-d66e71096ffb/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
10501058
golang.org/x/netv0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
10511059
golang.org/x/netv0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
10521060
golang.org/x/netv0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
10531061
golang.org/x/netv0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
1062+
golang.org/x/netv0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
10541063
golang.org/x/netv0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
10551064
golang.org/x/netv0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc=
10561065
golang.org/x/netv0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
@@ -1063,10 +1072,12 @@ golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
10631072
golang.org/x/netv0.22.0 h1:9sGLhx7iRIHEiX0oAJ3MRZMUCElJgy7Br1nO+AMN3Tc=
10641073
golang.org/x/netv0.22.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg=
10651074
golang.org/x/oauth2v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
1075+
golang.org/x/oauth2v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
10661076
golang.org/x/oauth2v0.18.0 h1:09qnuIAgzdx1XplqJvW6CQqMCtGZykZWcXzPMPUusvI=
10671077
golang.org/x/oauth2v0.18.0/go.mod h1:Wf7knwG0MPoWIMMBgFlEaSUDaKskp0dCfrlJRJXbBi8=
10681078
golang.org/x/syncv0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
10691079
golang.org/x/syncv0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
1080+
golang.org/x/syncv0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
10701081
golang.org/x/syncv0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
10711082
golang.org/x/syncv0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
10721083
golang.org/x/syncv0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp