@@ -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 ) {
0 commit comments