Skip to content

Commit efdbbbc

Browse files
committed
add kind-detail tests and required funcs
1 parent 690e17f commit efdbbbc

File tree

4 files changed

+79
-6
lines changed

4 files changed

+79
-6
lines changed

auth/accesstoken.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,11 @@ func (t *AccessToken) SetKind(kind livekit.ParticipantInfo_Kind) *AccessToken {
6262
return t
6363
}
6464

65+
func (t *AccessToken) SetKindDetail(kindDetail livekit.ParticipantInfo_KindDetail) *AccessToken {
66+
t.grant.SetParticipantKindDetail(kindDetail)
67+
return t
68+
}
69+
6570
// Deprecated: use SetVideoGrant instead
6671
func (t *AccessToken) AddGrant(grant *VideoGrant) *AccessToken {
6772
return t.SetVideoGrant(grant)

auth/grants.go

Lines changed: 30 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -49,12 +49,13 @@ func (c *RoomConfiguration) UnmarshalJSON(data []byte) error {
4949
}
5050

5151
type ClaimGrants struct {
52-
Identity string `json:"-"`
53-
Name string `json:"name,omitempty"`
54-
Kind string `json:"kind,omitempty"`
55-
Video *VideoGrant `json:"video,omitempty"`
56-
SIP *SIPGrant `json:"sip,omitempty"`
57-
Agent *AgentGrant `json:"agent,omitempty"`
52+
Identity string `json:"-"`
53+
Name string `json:"name,omitempty"`
54+
Kind string `json:"kind,omitempty"`
55+
KindDetail string `json:"kindDetail,omitempty"`
56+
Video *VideoGrant `json:"video,omitempty"`
57+
SIP *SIPGrant `json:"sip,omitempty"`
58+
Agent *AgentGrant `json:"agent,omitempty"`
5859
// Room configuration to use if this participant initiates the room
5960
RoomConfig *RoomConfiguration `json:"roomConfig,omitempty"`
6061
// Cloud-only, config preset to use
@@ -71,10 +72,18 @@ func (c *ClaimGrants) SetParticipantKind(kind livekit.ParticipantInfo_Kind) {
7172
c.Kind = kindFromProto(kind)
7273
}
7374

75+
func (c *ClaimGrants) SetParticipantKindDetail(kindDetail livekit.ParticipantInfo_KindDetail) {
76+
c.KindDetail = kindDetailFromProto(kindDetail)
77+
}
78+
7479
func (c *ClaimGrants) GetParticipantKind() livekit.ParticipantInfo_Kind {
7580
return kindToProto(c.Kind)
7681
}
7782

83+
func (c *ClaimGrants) GetParticipantKindDetail() livekit.ParticipantInfo_KindDetail {
84+
return kindDetailToProto(c.KindDetail)
85+
}
86+
7887
func (c *ClaimGrants) GetRoomConfiguration() *livekit.RoomConfiguration {
7988
if c.RoomConfig == nil {
8089
return nil
@@ -464,6 +473,10 @@ func kindFromProto(source livekit.ParticipantInfo_Kind) string {
464473
return strings.ToLower(source.String())
465474
}
466475

476+
func kindDetailFromProto(source livekit.ParticipantInfo_KindDetail) string {
477+
return strings.ToLower(source.String())
478+
}
479+
467480
func kindToProto(sourceStr string) livekit.ParticipantInfo_Kind {
468481
switch strings.ToLower(sourceStr) {
469482
case "", "standard":
@@ -480,3 +493,14 @@ func kindToProto(sourceStr string) livekit.ParticipantInfo_Kind {
480493
return livekit.ParticipantInfo_STANDARD
481494
}
482495
}
496+
497+
func kindDetailToProto(sourceStr string) livekit.ParticipantInfo_KindDetail {
498+
switch strings.ToLower(sourceStr) {
499+
case "cloud_agent":
500+
return livekit.ParticipantInfo_CLOUD_AGENT
501+
case "forwarded":
502+
return livekit.ParticipantInfo_FORWARDED
503+
default:
504+
return livekit.ParticipantInfo_CLOUD_AGENT
505+
}
506+
}

auth/grants_test.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,3 +99,17 @@ func TestParticipantKind(t *testing.T) {
9999
t.Errorf("Please update kindMax to match protobuf. Missing value: %s", kindNext)
100100
}
101101
}
102+
103+
func TestParticipantKindDetail(t *testing.T) {
104+
const kindDetailMin, kindDetailMax = livekit.ParticipantInfo_CLOUD_AGENT, livekit.ParticipantInfo_FORWARDED
105+
for k := kindDetailMin; k <= kindDetailMax; k++ {
106+
k := k
107+
t.Run(k.String(), func(t *testing.T) {
108+
require.Equal(t, k, kindDetailToProto(kindDetailFromProto(k)))
109+
})
110+
}
111+
const kindDetailNext = kindDetailMax + 1
112+
if _, err := strconv.Atoi(kindDetailNext.String()); err != nil {
113+
t.Errorf("Please update kindDetailMax to match protobuf. Missing value: %s", kindDetailNext)
114+
}
115+
}

auth/verifier_test.go

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,15 @@
1515
package auth_test
1616

1717
import (
18+
"strings"
1819
"testing"
1920
"time"
2021

2122
"github.com/go-jose/go-jose/v3/json"
2223
"github.com/stretchr/testify/require"
2324

2425
"github.com/livekit/protocol/auth"
26+
"github.com/livekit/protocol/livekit"
2527
)
2628

2729
func TestVerifier(t *testing.T) {
@@ -115,4 +117,32 @@ func TestVerifier(t *testing.T) {
115117
require.Nil(t, decoded.Video.CanPublish)
116118
require.False(t, *decoded.Video.CanPublishData)
117119
})
120+
121+
t.Run("kind test", func(t *testing.T) {
122+
at := auth.NewAccessToken(apiKey, secret).
123+
SetKind(livekit.ParticipantInfo_AGENT)
124+
token, err := at.ToJWT()
125+
require.NoError(t, err)
126+
127+
v, err := auth.ParseAPIToken(token)
128+
require.NoError(t, err)
129+
decoded, err := v.Verify(secret)
130+
require.NoError(t, err)
131+
require.Equal(t, strings.ToUpper(livekit.ParticipantInfo_Kind_name[int32(livekit.ParticipantInfo_AGENT)]), strings.ToUpper(decoded.Kind))
132+
})
133+
134+
t.Run("kind detail test", func(t *testing.T) {
135+
at := auth.NewAccessToken(apiKey, secret).
136+
SetKind(livekit.ParticipantInfo_AGENT).
137+
SetKindDetail(livekit.ParticipantInfo_CLOUD_AGENT)
138+
token, err := at.ToJWT()
139+
require.NoError(t, err)
140+
141+
v, err := auth.ParseAPIToken(token)
142+
require.NoError(t, err)
143+
decoded, err := v.Verify(secret)
144+
require.NoError(t, err)
145+
require.Equal(t, strings.ToLower(livekit.ParticipantInfo_KindDetail_name[int32(livekit.ParticipantInfo_CLOUD_AGENT)]), strings.ToLower(decoded.KindDetail))
146+
require.Equal(t, strings.ToLower(livekit.ParticipantInfo_Kind_name[int32(livekit.ParticipantInfo_AGENT)]), strings.ToLower(decoded.Kind))
147+
})
118148
}

0 commit comments

Comments
 (0)