@@ -909,6 +909,72 @@ func Run(t *testing.T, appHostIsPrimary bool, factory DeploymentFactory) {
909
909
require .Equal (t ,http .StatusOK ,resp .StatusCode )
910
910
})
911
911
912
+ t .Run ("PortSharingNoShare" ,func (t * testing.T ) {
913
+ t .Parallel ()
914
+
915
+ ctx ,cancel := context .WithTimeout (context .Background (),testutil .WaitLong )
916
+ defer cancel ()
917
+
918
+ userClient ,_ := coderdtest .CreateAnotherUser (t ,appDetails .SDKClient ,appDetails .FirstUser .OrganizationID ,rbac .RoleMember ())
919
+ userAppClient := appDetails .AppClient (t )
920
+ userAppClient .SetSessionToken (userClient .SessionToken ())
921
+
922
+ resp ,err := requestWithRetries (ctx ,t ,userAppClient ,http .MethodGet ,appDetails .SubdomainAppURL (appDetails .Apps .Port ).String (),nil )
923
+ require .NoError (t ,err )
924
+ defer resp .Body .Close ()
925
+ require .Equal (t ,http .StatusNotFound ,resp .StatusCode )
926
+ })
927
+
928
+ t .Run ("PortSharingAuthenticatedOK" ,func (t * testing.T ) {
929
+ t .Parallel ()
930
+
931
+ ctx ,cancel := context .WithTimeout (context .Background (),testutil .WaitLong )
932
+ defer cancel ()
933
+
934
+ port ,err := strconv .ParseInt (appDetails .Apps .Port .AppSlugOrPort ,10 ,32 )
935
+ require .NoError (t ,err )
936
+ err = appDetails .SDKClient .UpdateWorkspaceAgentPortShare (ctx ,appDetails .Workspace .ID , codersdk.UpdateWorkspaceAgentPortShareRequest {
937
+ AgentName :proxyTestAgentName ,
938
+ Port :int32 (port ),
939
+ ShareLevel :codersdk .WorkspaceAgentPortShareLevelAuthenticated ,
940
+ })
941
+ require .NoError (t ,err )
942
+
943
+ userClient ,_ := coderdtest .CreateAnotherUser (t ,appDetails .SDKClient ,appDetails .FirstUser .OrganizationID ,rbac .RoleMember ())
944
+ userAppClient := appDetails .AppClient (t )
945
+ userAppClient .SetSessionToken (userClient .SessionToken ())
946
+
947
+ resp ,err := requestWithRetries (ctx ,t ,userAppClient ,http .MethodGet ,appDetails .SubdomainAppURL (appDetails .Apps .Port ).String (),nil )
948
+ require .NoError (t ,err )
949
+ defer resp .Body .Close ()
950
+ require .Equal (t ,http .StatusOK ,resp .StatusCode )
951
+ })
952
+
953
+ t .Run ("PortSharingPublicOK" ,func (t * testing.T ) {
954
+ t .Parallel ()
955
+
956
+ ctx ,cancel := context .WithTimeout (context .Background (),testutil .WaitLong )
957
+ defer cancel ()
958
+
959
+ port ,err := strconv .ParseInt (appDetails .Apps .Port .AppSlugOrPort ,10 ,32 )
960
+ require .NoError (t ,err )
961
+ err = appDetails .SDKClient .UpdateWorkspaceAgentPortShare (ctx ,appDetails .Workspace .ID , codersdk.UpdateWorkspaceAgentPortShareRequest {
962
+ AgentName :proxyTestAgentName ,
963
+ Port :int32 (port ),
964
+ ShareLevel :codersdk .WorkspaceAgentPortShareLevelPublic ,
965
+ })
966
+ require .NoError (t ,err )
967
+
968
+ _ ,_ = coderdtest .CreateAnotherUser (t ,appDetails .SDKClient ,appDetails .FirstUser .OrganizationID ,rbac .RoleMember ())
969
+ userAppClient := appDetails .AppClient (t )
970
+ userAppClient .SetSessionToken ("" )
971
+
972
+ resp ,err := requestWithRetries (ctx ,t ,userAppClient ,http .MethodGet ,appDetails .SubdomainAppURL (appDetails .Apps .Port ).String (),nil )
973
+ require .NoError (t ,err )
974
+ defer resp .Body .Close ()
975
+ require .Equal (t ,http .StatusOK ,resp .StatusCode )
976
+ })
977
+
912
978
t .Run ("ProxyError" ,func (t * testing.T ) {
913
979
t .Parallel ()
914
980