@@ -625,6 +625,7 @@ func TestGetAuthorizedWorkspacesAndAgentsByOwnerID(t *testing.T) {
625
625
err := migrations .Up (sqlDB )
626
626
require .NoError (t ,err )
627
627
db := database .New (sqlDB )
628
+ authorizer := rbac .NewStrictCachingAuthorizer (prometheus .NewRegistry ())
628
629
629
630
org := dbgen .Organization (t ,db , database.Organization {})
630
631
owner := dbgen .User (t ,db , database.User {
@@ -669,44 +670,72 @@ func TestGetAuthorizedWorkspacesAndAgentsByOwnerID(t *testing.T) {
669
670
CreateAgent :false ,
670
671
})
671
672
672
- authorizer := rbac .NewStrictCachingAuthorizer (prometheus .NewRegistry ())
673
- userSubject ,_ ,err := httpmw .UserRBACSubject (ctx ,db ,user .ID ,rbac .ExpandableScope (rbac .ScopeAll ))
674
- require .NoError (t ,err )
675
- preparedUser ,err := authorizer .Prepare (ctx ,userSubject ,policy .ActionRead ,rbac .ResourceWorkspace .Type )
676
- require .NoError (t ,err )
677
- userCtx := dbauthz .As (ctx ,userSubject )
678
- userRows ,err := db .GetAuthorizedWorkspacesAndAgentsByOwnerID (userCtx ,owner .ID ,preparedUser )
679
- require .NoError (t ,err )
680
- require .Len (t ,userRows ,0 )
681
-
682
- ownerSubject ,_ ,err := httpmw .UserRBACSubject (ctx ,db ,owner .ID ,rbac .ExpandableScope (rbac .ScopeAll ))
683
- require .NoError (t ,err )
684
- preparedOwner ,err := authorizer .Prepare (ctx ,ownerSubject ,policy .ActionRead ,rbac .ResourceWorkspace .Type )
685
- require .NoError (t ,err )
686
- ownerCtx := dbauthz .As (ctx ,ownerSubject )
687
- ownerRows ,err := db .GetAuthorizedWorkspacesAndAgentsByOwnerID (ownerCtx ,owner .ID ,preparedOwner )
688
- require .NoError (t ,err )
689
- require .Len (t ,ownerRows ,4 )
690
- for _ ,row := range ownerRows {
691
- switch row .ID {
692
- case pendingID :
693
- require .Len (t ,row .Agents ,1 )
694
- require .Equal (t ,database .ProvisionerJobStatusPending ,row .JobStatus )
695
- case failedID :
696
- require .Len (t ,row .Agents ,1 )
697
- require .Equal (t ,database .ProvisionerJobStatusFailed ,row .JobStatus )
698
- case succeededID :
699
- require .Len (t ,row .Agents ,2 )
700
- require .Equal (t ,database .ProvisionerJobStatusSucceeded ,row .JobStatus )
701
- require .Equal (t ,database .WorkspaceTransitionStart ,row .Transition )
702
- case deletedID :
703
- require .Len (t ,row .Agents ,0 )
704
- require .Equal (t ,database .ProvisionerJobStatusSucceeded ,row .JobStatus )
705
- require .Equal (t ,database .WorkspaceTransitionDelete ,row .Transition )
706
- default :
707
- t .Fatalf ("unexpected workspace ID: %s" ,row .ID )
673
+ ownerCheckFn := func (ownerRows []database.GetWorkspacesAndAgentsByOwnerIDRow ) {
674
+ require .Len (t ,ownerRows ,4 )
675
+ for _ ,row := range ownerRows {
676
+ switch row .ID {
677
+ case pendingID :
678
+ require .Len (t ,row .Agents ,1 )
679
+ require .Equal (t ,database .ProvisionerJobStatusPending ,row .JobStatus )
680
+ case failedID :
681
+ require .Len (t ,row .Agents ,1 )
682
+ require .Equal (t ,database .ProvisionerJobStatusFailed ,row .JobStatus )
683
+ case succeededID :
684
+ require .Len (t ,row .Agents ,2 )
685
+ require .Equal (t ,database .ProvisionerJobStatusSucceeded ,row .JobStatus )
686
+ require .Equal (t ,database .WorkspaceTransitionStart ,row .Transition )
687
+ case deletedID :
688
+ require .Len (t ,row .Agents ,0 )
689
+ require .Equal (t ,database .ProvisionerJobStatusSucceeded ,row .JobStatus )
690
+ require .Equal (t ,database .WorkspaceTransitionDelete ,row .Transition )
691
+ default :
692
+ t .Fatalf ("unexpected workspace ID: %s" ,row .ID )
693
+ }
708
694
}
709
695
}
696
+ t .Run ("sqlQuerier" ,func (t * testing.T ) {
697
+ t .Parallel ()
698
+
699
+ userSubject ,_ ,err := httpmw .UserRBACSubject (ctx ,db ,user .ID ,rbac .ExpandableScope (rbac .ScopeAll ))
700
+ require .NoError (t ,err )
701
+ preparedUser ,err := authorizer .Prepare (ctx ,userSubject ,policy .ActionRead ,rbac .ResourceWorkspace .Type )
702
+ require .NoError (t ,err )
703
+ userCtx := dbauthz .As (ctx ,userSubject )
704
+ userRows ,err := db .GetAuthorizedWorkspacesAndAgentsByOwnerID (userCtx ,owner .ID ,preparedUser )
705
+ require .NoError (t ,err )
706
+ require .Len (t ,userRows ,0 )
707
+
708
+ ownerSubject ,_ ,err := httpmw .UserRBACSubject (ctx ,db ,owner .ID ,rbac .ExpandableScope (rbac .ScopeAll ))
709
+ require .NoError (t ,err )
710
+ preparedOwner ,err := authorizer .Prepare (ctx ,ownerSubject ,policy .ActionRead ,rbac .ResourceWorkspace .Type )
711
+ require .NoError (t ,err )
712
+ ownerCtx := dbauthz .As (ctx ,ownerSubject )
713
+ ownerRows ,err := db .GetAuthorizedWorkspacesAndAgentsByOwnerID (ownerCtx ,owner .ID ,preparedOwner )
714
+ require .NoError (t ,err )
715
+ ownerCheckFn (ownerRows )
716
+ })
717
+
718
+ t .Run ("dbauthz" ,func (t * testing.T ) {
719
+ t .Parallel ()
720
+
721
+ authzdb := dbauthz .New (db ,authorizer ,slogtest .Make (t ,& slogtest.Options {}),coderdtest .AccessControlStorePointer ())
722
+
723
+ userSubject ,_ ,err := httpmw .UserRBACSubject (ctx ,authzdb ,user .ID ,rbac .ExpandableScope (rbac .ScopeAll ))
724
+ require .NoError (t ,err )
725
+ userCtx := dbauthz .As (ctx ,userSubject )
726
+
727
+ ownerSubject ,_ ,err := httpmw .UserRBACSubject (ctx ,authzdb ,owner .ID ,rbac .ExpandableScope (rbac .ScopeAll ))
728
+ require .NoError (t ,err )
729
+ ownerCtx := dbauthz .As (ctx ,ownerSubject )
730
+
731
+ userRows ,err := authzdb .GetWorkspacesAndAgentsByOwnerID (userCtx ,owner .ID )
732
+ require .NoError (t ,err )
733
+ require .Len (t ,userRows ,0 )
734
+
735
+ ownerRows ,err := authzdb .GetWorkspacesAndAgentsByOwnerID (ownerCtx ,owner .ID )
736
+ require .NoError (t ,err )
737
+ ownerCheckFn (ownerRows )
738
+ })
710
739
}
711
740
712
741
func TestInsertWorkspaceAgentLogs (t * testing.T ) {