From 26c79210c852567399ba4ab43063595cc6498e25 Mon Sep 17 00:00:00 2001 From: Joachim Bauch Date: Fri, 3 Jun 2016 09:58:44 +0200 Subject: [PATCH] Move room type names to constants and don't expose roomworker properties. --- go/channelling/api.go | 5 +++++ go/channelling/api/api_test.go | 10 +++++----- go/channelling/api/handle_conference.go | 2 +- go/channelling/api/handle_room.go | 2 +- go/channelling/room_manager_test.go | 24 ++++++++++++----------- go/channelling/roomworker.go | 26 ++++++++++++------------- go/channelling/roomworker_test.go | 6 ++++-- go/channelling/server/config.go | 4 ++-- 8 files changed, 44 insertions(+), 35 deletions(-) diff --git a/go/channelling/api.go b/go/channelling/api.go index aa14b79b..b44002a8 100644 --- a/go/channelling/api.go +++ b/go/channelling/api.go @@ -21,6 +21,11 @@ package channelling +const ( + RoomTypeConference = "Conference" + RoomTypeRoom = "Room" +) + type ChannellingAPI interface { OnConnect(*Client, *Session) (interface{}, error) OnDisconnect(*Client, *Session) diff --git a/go/channelling/api/api_test.go b/go/channelling/api/api_test.go index 4d1299a9..90787787 100644 --- a/go/channelling/api/api_test.go +++ b/go/channelling/api/api_test.go @@ -77,7 +77,7 @@ func (fake *fakeRoomManager) UpdateRoom(_ *channelling.Session, _ *channelling.D func (fake *fakeRoomManager) MakeRoomID(roomName, roomType string) string { if roomType == "" { - roomType = "Room" + roomType = channelling.RoomTypeRoom } return fmt.Sprintf("%s:%s", roomType, roomName) } @@ -98,7 +98,7 @@ func NewTestChannellingAPI() (channelling.ChannellingAPI, *fakeClient, *channell } func Test_ChannellingAPI_OnIncoming_HelloMessage_JoinsTheSelectedRoom(t *testing.T) { - roomID, roomName, ua := "Room:foobar", "foobar", "unit tests" + roomID, roomName, ua := channelling.RoomTypeRoom+":foobar", "foobar", "unit tests" api, client, session, roomManager := NewTestChannellingAPI() api.OnIncoming(client, session, &channelling.DataIncoming{Type: "Hello", Hello: &channelling.DataHello{Id: roomName, Ua: ua}}) @@ -122,7 +122,7 @@ func Test_ChannellingAPI_OnIncoming_HelloMessage_JoinsTheSelectedRoom(t *testing } func Test_ChannellingAPI_OnIncoming_HelloMessage_LeavesAnyPreviouslyJoinedRooms(t *testing.T) { - roomID, roomName := "Room:foobar", "foobar" + roomID, roomName := channelling.RoomTypeRoom+":foobar", "foobar" api, client, session, roomManager := NewTestChannellingAPI() api.OnIncoming(client, session, &channelling.DataIncoming{Type: "Hello", Hello: &channelling.DataHello{Id: roomName}}) @@ -204,7 +204,7 @@ func Test_ChannellingAPI_OnIncoming_RoomMessage_RespondsWithAndBroadcastsTheUpda t.Fatalf("Unexpected error %v", err) } - reply, err := api.OnIncoming(client, session, &channelling.DataIncoming{Type: "Room", Room: &channelling.DataRoom{Name: roomName}}) + reply, err := api.OnIncoming(client, session, &channelling.DataIncoming{Type: channelling.RoomTypeRoom, Room: &channelling.DataRoom{Name: roomName}}) if err != nil { t.Fatalf("Unexpected error %v", err) } @@ -236,7 +236,7 @@ func Test_ChannellingAPI_OnIncoming_RoomMessage_RespondsWithAnErrorIfUpdatingThe if err != nil { t.Fatalf("Unexpected error %v", err) } - _, err = api.OnIncoming(client, session, &channelling.DataIncoming{Type: "Room", Room: &channelling.DataRoom{Name: roomName}}) + _, err = api.OnIncoming(client, session, &channelling.DataIncoming{Type: channelling.RoomTypeRoom, Room: &channelling.DataRoom{Name: roomName}}) assertDataError(t, err, "a_room_error") } diff --git a/go/channelling/api/handle_conference.go b/go/channelling/api/handle_conference.go index df9933a8..9ddbad65 100644 --- a/go/channelling/api/handle_conference.go +++ b/go/channelling/api/handle_conference.go @@ -28,7 +28,7 @@ import ( ) func (api *channellingAPI) HandleConference(session *channelling.Session, conference *channelling.DataConference) { - if room, ok := api.RoomStatusManager.Get(session.Roomid); ok && room.GetType() == "Conference" { + if room, ok := api.RoomStatusManager.Get(session.Roomid); ok && room.GetType() == channelling.RoomTypeConference { log.Println("Refusing client-side conference update for server-managed conferences.") return } diff --git a/go/channelling/api/handle_room.go b/go/channelling/api/handle_room.go index 62409a6f..d1ae23ed 100644 --- a/go/channelling/api/handle_room.go +++ b/go/channelling/api/handle_room.go @@ -42,7 +42,7 @@ func (api *channellingAPI) RoomProcessed(sender channelling.Sender, session *cha func (api *channellingAPI) SendConferenceRoomUpdate(session *channelling.Session) { // If user joined a server-managed conference room, send list of session ids to all participants. - if room, ok := api.RoomStatusManager.Get(session.Roomid); ok && room.GetType() == "Conference" { + if room, ok := api.RoomStatusManager.Get(session.Roomid); ok && room.GetType() == channelling.RoomTypeConference { if sessionids := room.SessionIDs(); len(sessionids) > 1 { cid := session.Roomid session.Broadcaster.Broadcast("", session.Roomid, &channelling.DataOutgoing{ diff --git a/go/channelling/room_manager_test.go b/go/channelling/room_manager_test.go index 26a946c5..28ac9e69 100644 --- a/go/channelling/room_manager_test.go +++ b/go/channelling/room_manager_test.go @@ -23,11 +23,13 @@ package channelling import ( "testing" + + "github.com/strukturag/spreed-webrtc/go/channelling" ) func NewTestRoomManager() (RoomManager, *Config) { config := &Config{ - RoomTypeDefault: "Room", + RoomTypeDefault: channelling.RoomTypeRoom, } return NewRoomManager(config, nil), config } @@ -38,16 +40,16 @@ func Test_RoomManager_JoinRoom_ReturnsAnErrorForUnauthenticatedSessionsWhenCreat config.AuthorizeRoomCreation = true unauthenticatedSession := &Session{} - _, err := roomManager.JoinRoom("Room:foo", "foo", "Room", nil, unauthenticatedSession, false, nil) + _, err := roomManager.JoinRoom(channelling.RoomTypeRoom+":foo", "foo", channelling.RoomTypeRoom, nil, unauthenticatedSession, false, nil) assertDataError(t, err, "room_join_requires_account") authenticatedSession := &Session{userid: "9870457"} - _, err = roomManager.JoinRoom("Room:foo", "foo", "Room", nil, authenticatedSession, true, nil) + _, err = roomManager.JoinRoom(channelling.RoomTypeRoom+":foo", "foo", channelling.RoomTypeRoom, nil, authenticatedSession, true, nil) if err != nil { t.Fatalf("Unexpected error %v joining room while authenticated", err) } - _, err = roomManager.JoinRoom("Room:foo", "foo", "Room", nil, unauthenticatedSession, false, nil) + _, err = roomManager.JoinRoom(channelling.RoomTypeRoom+":foo", "foo", channelling.RoomTypeRoom, nil, unauthenticatedSession, false, nil) if err != nil { t.Fatalf("Unexpected error %v joining room while unauthenticated", err) } @@ -59,16 +61,16 @@ func Test_RoomManager_JoinRoom_ReturnsAnErrorForUnauthenticatedSessionsWhenJoinR config.AuthorizeRoomJoin = true unauthenticatedSession := &Session{} - _, err := roomManager.JoinRoom("Room:foo", "foo", "Room", nil, unauthenticatedSession, false, nil) + _, err := roomManager.JoinRoom(channelling.RoomTypeRoom+":foo", "foo", channelling.RoomTypeRoom, nil, unauthenticatedSession, false, nil) assertDataError(t, err, "room_join_requires_account") authenticatedSession := &Session{userid: "9870457"} - _, err = roomManager.JoinRoom("Room:foo", "foo", "Room", nil, authenticatedSession, true, nil) + _, err = roomManager.JoinRoom(channelling.RoomTypeRoom+":foo", "foo", channelling.RoomTypeRoom, nil, authenticatedSession, true, nil) if err != nil { t.Fatalf("Unexpected error %v joining room while authenticated", err) } - _, err = roomManager.JoinRoom("Room:foo", "foo", "Room", nil, unauthenticatedSession, false, nil) + _, err = roomManager.JoinRoom(channelling.RoomTypeRoom+":foo", "foo", channelling.RoomTypeRoom, nil, unauthenticatedSession, false, nil) assertDataError(t, err, "room_join_requires_account") } @@ -81,20 +83,20 @@ func Test_RoomManager_UpdateRoom_ReturnsAnErrorIfNoRoomHasBeenJoined(t *testing. func Test_RoomManager_UpdateRoom_ReturnsAnErrorIfUpdatingAnUnjoinedRoom(t *testing.T) { roomManager, _ := NewTestRoomManager() - session := &Session{Hello: true, Roomid: "Room:foo"} + session := &Session{Hello: true, Roomid: channelling.RoomTypeRoom + ":foo"} _, err := roomManager.UpdateRoom(session, &DataRoom{Name: "bar"}) assertDataError(t, err, "not_in_room") } func Test_RoomManager_UpdateRoom_ReturnsACorrectlyTypedDocument(t *testing.T) { roomManager, _ := NewTestRoomManager() - session := &Session{Hello: true, Roomid: "Room:foo"} + session := &Session{Hello: true, Roomid: channelling.RoomTypeRoom + ":foo"} room, err := roomManager.UpdateRoom(session, &DataRoom{Name: "foo"}) if err != nil { t.Fatalf("Unexpected error %v updating room", err) } - if room.Type != "Room" { - t.Errorf("Expected document type to be Room, but was %v", room.Type) + if room.Type != channelling.RoomTypeRoom { + t.Errorf("Expected document type to be %s, but was %v", channelling.RoomTypeRoom, room.Type) } } diff --git a/go/channelling/roomworker.go b/go/channelling/roomworker.go index ef504e8d..56970eef 100644 --- a/go/channelling/roomworker.go +++ b/go/channelling/roomworker.go @@ -61,8 +61,8 @@ type roomWorker struct { // Metadata. id string - Name string - Type string + name string + roomType string credentials *DataRoomCredentials } @@ -75,13 +75,13 @@ func NewRoomWorker(manager *roomManager, roomID, roomName, roomType string, cred log.Printf("Creating worker for room '%s'\n", roomID) r := &roomWorker{ - manager: manager, - id: roomID, - Name: roomName, - Type: roomType, - workers: make(chan func(), roomMaxWorkers), - expired: make(chan bool), - users: make(map[string]*roomUser), + manager: manager, + id: roomID, + name: roomName, + roomType: roomType, + workers: make(chan func(), roomMaxWorkers), + expired: make(chan bool), + users: make(map[string]*roomUser), } if credentials != nil && len(credentials.PIN) > 0 { @@ -148,7 +148,7 @@ func (r *roomWorker) Users() []*roomUser { } func (r *roomWorker) GetType() string { - return r.Type + return r.roomType } func (r *roomWorker) Run(f func()) bool { @@ -166,8 +166,8 @@ func (r *roomWorker) Update(room *DataRoom) error { worker := func() { r.mutex.Lock() // Enforce room type and name. - room.Type = r.Type - room.Name = r.Name + room.Type = r.roomType + room.Name = r.name // Update credentials. if room.Credentials != nil { if len(room.Credentials.PIN) > 0 { @@ -275,7 +275,7 @@ func (r *roomWorker) Join(credentials *DataRoomCredentials, session *Session, se r.users[session.Id] = &roomUser{session, sender} // NOTE(lcooper): Needs to be a copy, else we risk races with // a subsequent modification of room properties. - result := joinResult{&DataRoom{Name: r.Name, Type: r.Type}, nil} + result := joinResult{&DataRoom{Name: r.name, Type: r.roomType}, nil} r.mutex.Unlock() results <- result } diff --git a/go/channelling/roomworker_test.go b/go/channelling/roomworker_test.go index e2d1d7e2..21af5634 100644 --- a/go/channelling/roomworker_test.go +++ b/go/channelling/roomworker_test.go @@ -23,12 +23,14 @@ package channelling import ( "testing" + + "github.com/strukturag/spreed-webrtc/go/channelling" ) const ( - testRoomID string = "Room:a-room-name" + testRoomID string = channelling.RoomTypeRoom + ":a-room-name" testRoomName string = "a-room-name" - testRoomType string = "Room" + testRoomType string = channelling.RoomTypeRoom ) func NewTestRoomWorker() RoomWorker { diff --git a/go/channelling/server/config.go b/go/channelling/server/config.go index 1f202ac6..fa234c28 100644 --- a/go/channelling/server/config.go +++ b/go/channelling/server/config.go @@ -34,12 +34,12 @@ import ( ) const ( - defaultRoomType = "Room" + defaultRoomType = channelling.RoomTypeRoom ) var ( knownRoomTypes = map[string]bool{ - "Conference": true, + channelling.RoomTypeConference: true, } )