@@ -615,58 +615,54 @@ func TestWorkspaceUpdateTTL(t *testing.T) {
615
615
})
616
616
}
617
617
618
- func TestWorkspaceExtendAutostop (t * testing.T ) {
618
+ func TestWorkspaceExtend (t * testing.T ) {
619
619
t .Parallel ()
620
- t .Run ("OK" , func (t * testing.T ) {
621
- t .Parallel ()
622
- var (
623
- ctx = context .Background ()
624
- client = coderdtest .New (t , & coderdtest.Options {IncludeProvisionerD : true })
625
- user = coderdtest .CreateFirstUser (t , client )
626
- version = coderdtest .CreateTemplateVersion (t , client , user .OrganizationID , nil )
627
- _ = coderdtest .AwaitTemplateVersionJob (t , client , version .ID )
628
- project = coderdtest .CreateTemplate (t , client , user .OrganizationID , version .ID )
629
- workspace = coderdtest .CreateWorkspace (t , client , user .OrganizationID , project .ID )
630
- extend = 90 * time .Minute
631
- _ = coderdtest .AwaitWorkspaceBuildJob (t , client , workspace .LatestBuild .ID )
632
- )
633
-
634
- workspace , err := client .Workspace (ctx , workspace .ID )
635
- require .NoError (t , err , "fetch provisioned workspace" )
636
- req := codersdk.PutExtendWorkspaceRequest {
637
- Deadline : workspace .LatestBuild .UpdatedAt .Add (extend ),
638
- }
639
- err = client .PutExtendWorkspace (ctx , workspace .ID , req )
640
- require .NoError (t , err , "failed to extend workspace" )
641
-
642
- updated , err := client .Workspace (ctx , workspace .ID )
643
- require .NoError (t , err , "failed to fetch updated workspace" )
644
- require .Equal (t , workspace .LatestBuild .Deadline .Add (extend ), updated .LatestBuild .Deadline )
645
- })
620
+ var (
621
+ ctx = context .Background ()
622
+ client = coderdtest .New (t , & coderdtest.Options {IncludeProvisionerD : true })
623
+ user = coderdtest .CreateFirstUser (t , client )
624
+ version = coderdtest .CreateTemplateVersion (t , client , user .OrganizationID , nil )
625
+ _ = coderdtest .AwaitTemplateVersionJob (t , client , version .ID )
626
+ project = coderdtest .CreateTemplate (t , client , user .OrganizationID , version .ID )
627
+ workspace = coderdtest .CreateWorkspace (t , client , user .OrganizationID , project .ID )
628
+ extend = 90 * time .Minute
629
+ _ = coderdtest .AwaitWorkspaceBuildJob (t , client , workspace .LatestBuild .ID )
630
+ oldDeadline = time .Now ().Add (* workspace .TTL ).UTC ()
631
+ newDeadline = time .Now ().Add (* workspace .TTL + extend ).UTC ()
632
+ )
633
+
634
+ workspace , err := client .Workspace (ctx , workspace .ID )
635
+ require .NoError (t , err , "fetch provisioned workspace" )
636
+ require .InDelta (t , oldDeadline .Unix (), workspace .LatestBuild .Deadline .Unix (), 1 )
637
+
638
+ // Updating the deadline should succeed
639
+ req := codersdk.PutExtendWorkspaceRequest {
640
+ Deadline : newDeadline ,
641
+ }
642
+ err = client .PutExtendWorkspace (ctx , workspace .ID , req )
643
+ require .NoError (t , err , "failed to extend workspace" )
646
644
647
- t .Run ("DeadlineZero" , func (t * testing.T ) {
648
- t .Parallel ()
649
- var (
650
- ctx = context .Background ()
651
- client = coderdtest .New (t , & coderdtest.Options {IncludeProvisionerD : true })
652
- user = coderdtest .CreateFirstUser (t , client )
653
- version = coderdtest .CreateTemplateVersion (t , client , user .OrganizationID , nil )
654
- _ = coderdtest .AwaitTemplateVersionJob (t , client , version .ID )
655
- project = coderdtest .CreateTemplate (t , client , user .OrganizationID , version .ID )
656
- workspace = coderdtest .CreateWorkspace (t , client , user .OrganizationID , project .ID )
657
- _ = coderdtest .AwaitWorkspaceBuildJob (t , client , workspace .LatestBuild .ID )
658
- )
645
+ // Ensure deadline set correctly
646
+ updated , err := client .Workspace (ctx , workspace .ID )
647
+ require .NoError (t , err , "failed to fetch updated workspace" )
648
+ require .InDelta (t , newDeadline .Unix (), updated .LatestBuild .Deadline .Unix (), 1 )
659
649
660
- req := codersdk. PutExtendWorkspaceRequest {
661
- Deadline : time. Time {},
662
- }
663
- err := client . PutExtendWorkspace ( ctx , workspace . ID , req )
664
- require .ErrorContains (t , err , "deadline: required" , "failed to update workspace ttl " )
650
+ // Zero time should fail
651
+ err = client . PutExtendWorkspace ( ctx , workspace . ID , codersdk. PutExtendWorkspaceRequest {
652
+ Deadline : time. Time {},
653
+ } )
654
+ require .ErrorContains (t , err , "deadline: required" , "setting an empty deadline on a workspace should fail " )
665
655
666
- updated , err := client . Workspace ( ctx , workspace . ID )
667
- require . NoError ( t , err , "failed to fetch updated workspace" )
668
- require . Equal ( t , workspace . LatestBuild . Deadline , updated . LatestBuild . Deadline )
656
+ // Updating with an earlier time should also fail
657
+ err = client . PutExtendWorkspace ( ctx , workspace . ID , codersdk. PutExtendWorkspaceRequest {
658
+ Deadline : oldDeadline ,
669
659
})
660
+ require .ErrorContains (t , err , "must be after existing deadline" , "setting an earlier deadline should fail" )
661
+
662
+ // Ensure deadline still set correctly
663
+ updated , err = client .Workspace (ctx , workspace .ID )
664
+ require .NoError (t , err , "failed to fetch updated workspace" )
665
+ require .InDelta (t , newDeadline .Unix (), updated .LatestBuild .Deadline .Unix (), 1 )
670
666
}
671
667
672
668
func TestWorkspaceWatcher (t * testing.T ) {
0 commit comments