summaryrefslogtreecommitdiffstats
path: root/api
diff options
context:
space:
mode:
authorCorey Hulen <corey@hulen.com>2015-08-02 09:17:52 -0800
committerCorey Hulen <corey@hulen.com>2015-08-02 09:17:52 -0800
commit38e44e8f618b8e1af2ed2ded5efb5d3a887db279 (patch)
treece64b8c8a70b4e819f5c28a5b25cd13eeb45f217 /api
parent4d1562c5de377741734a0ad4e8eb30a83d301262 (diff)
parentc7a8112c172a55741e1dcbf366ed637543c301ce (diff)
downloadchat-38e44e8f618b8e1af2ed2ded5efb5d3a887db279.tar.gz
chat-38e44e8f618b8e1af2ed2ded5efb5d3a887db279.tar.bz2
chat-38e44e8f618b8e1af2ed2ded5efb5d3a887db279.zip
Merge pull request #278 from mattermost/mm-1702
MM-1702 Adding etag to channel extra_info api call.
Diffstat (limited to 'api')
-rw-r--r--api/channel.go22
-rw-r--r--api/channel_benchmark_test.go2
-rw-r--r--api/channel_test.go68
3 files changed, 83 insertions, 9 deletions
diff --git a/api/channel.go b/api/channel.go
index 123fd8a35..803274d32 100644
--- a/api/channel.go
+++ b/api/channel.go
@@ -554,20 +554,29 @@ func getChannelExtraInfo(c *Context, w http.ResponseWriter, r *http.Request) {
id := params["id"]
sc := Srv.Store.Channel().Get(id)
- scm := Srv.Store.Channel().GetMember(id, c.Session.UserId)
- ecm := Srv.Store.Channel().GetExtraMembers(id, 20)
-
+ var channel *model.Channel
if cresult := <-sc; cresult.Err != nil {
c.Err = cresult.Err
return
- } else if cmresult := <-scm; cmresult.Err != nil {
+ } else {
+ channel = cresult.Data.(*model.Channel)
+ }
+
+ extraEtag := channel.ExtraEtag()
+ if HandleEtag(extraEtag, w, r) {
+ return
+ }
+
+ scm := Srv.Store.Channel().GetMember(id, c.Session.UserId)
+ ecm := Srv.Store.Channel().GetExtraMembers(id, 20)
+
+ if cmresult := <-scm; cmresult.Err != nil {
c.Err = cmresult.Err
return
} else if ecmresult := <-ecm; ecmresult.Err != nil {
c.Err = ecmresult.Err
return
} else {
- channel := cresult.Data.(*model.Channel)
member := cmresult.Data.(model.ChannelMember)
extraMembers := ecmresult.Data.([]model.ExtraMember)
@@ -586,6 +595,7 @@ func getChannelExtraInfo(c *Context, w http.ResponseWriter, r *http.Request) {
}
data := model.ChannelExtra{Id: channel.Id, Members: extraMembers}
+ w.Header().Set(model.HEADER_ETAG_SERVER, extraEtag)
w.Header().Set("Expires", "-1")
w.Write([]byte(data.ToJson()))
}
@@ -711,7 +721,7 @@ func removeChannelMember(c *Context, w http.ResponseWriter, r *http.Request) {
}
message := model.NewMessage(c.Session.TeamId, "", userId, model.ACTION_USER_REMOVED)
- message.Add("channel_id",id)
+ message.Add("channel_id", id)
message.Add("remover", c.Session.UserId)
PublishAndForget(message)
diff --git a/api/channel_benchmark_test.go b/api/channel_benchmark_test.go
index 881638176..77e679c14 100644
--- a/api/channel_benchmark_test.go
+++ b/api/channel_benchmark_test.go
@@ -189,7 +189,7 @@ func BenchmarkGetChannelExtraInfo(b *testing.B) {
b.ResetTimer()
for i := 0; i < b.N; i++ {
for j := range channels {
- Client.Must(Client.GetChannelExtraInfo(channels[j].Id))
+ Client.Must(Client.GetChannelExtraInfo(channels[j].Id, ""))
}
}
}
diff --git a/api/channel_test.go b/api/channel_test.go
index a8d53c4b5..d4fb11bd8 100644
--- a/api/channel_test.go
+++ b/api/channel_test.go
@@ -6,6 +6,7 @@ package api
import (
"github.com/mattermost/platform/model"
"github.com/mattermost/platform/store"
+ "github.com/mattermost/platform/utils"
"net/http"
"testing"
"time"
@@ -543,10 +544,73 @@ func TestGetChannelExtraInfo(t *testing.T) {
channel1 := &model.Channel{DisplayName: "A Test API Name", Name: "a" + model.NewId() + "a", Type: model.CHANNEL_OPEN, TeamId: team.Id}
channel1 = Client.Must(Client.CreateChannel(channel1)).Data.(*model.Channel)
- rget := Client.Must(Client.GetChannelExtraInfo(channel1.Id)).Data.(*model.ChannelExtra)
- if rget.Id != channel1.Id {
+ rget := Client.Must(Client.GetChannelExtraInfo(channel1.Id, ""))
+ data := rget.Data.(*model.ChannelExtra)
+ if data.Id != channel1.Id {
t.Fatal("couldnt't get extra info")
}
+
+ //
+ // Testing etag caching
+ //
+
+ currentEtag := rget.Etag
+
+ if cache_result, err := Client.GetChannelExtraInfo(channel1.Id, currentEtag); err != nil {
+ t.Fatal(err)
+ } else if cache_result.Data.(*model.ChannelExtra) != nil {
+ t.Log(cache_result.Data)
+ t.Fatal("response should be empty")
+ } else {
+ currentEtag = cache_result.Etag
+ }
+
+ Client2 := model.NewClient("http://localhost:" + utils.Cfg.ServiceSettings.Port + "/api/v1")
+
+ user2 := &model.User{TeamId: team.Id, Email: model.NewId() + "tester2@test.com", Nickname: "Tester 2", Password: "pwd"}
+ user2 = Client2.Must(Client2.CreateUser(user2, "")).Data.(*model.User)
+ store.Must(Srv.Store.User().VerifyEmail(user2.Id))
+
+ Client2.LoginByEmail(team.Name, user2.Email, "pwd")
+ Client2.Must(Client2.JoinChannel(channel1.Id))
+
+ if cache_result, err := Client.GetChannelExtraInfo(channel1.Id, currentEtag); err != nil {
+ t.Fatal(err)
+ } else if cache_result.Data.(*model.ChannelExtra) == nil {
+ t.Log(cache_result.Data)
+ t.Fatal("response should not be empty")
+ } else {
+ currentEtag = cache_result.Etag
+ }
+
+ if cache_result, err := Client.GetChannelExtraInfo(channel1.Id, currentEtag); err != nil {
+ t.Fatal(err)
+ } else if cache_result.Data.(*model.ChannelExtra) != nil {
+ t.Log(cache_result.Data)
+ t.Fatal("response should be empty")
+ } else {
+ currentEtag = cache_result.Etag
+ }
+
+ Client2.Must(Client2.LeaveChannel(channel1.Id))
+
+ if cache_result, err := Client.GetChannelExtraInfo(channel1.Id, currentEtag); err != nil {
+ t.Fatal(err)
+ } else if cache_result.Data.(*model.ChannelExtra) == nil {
+ t.Log(cache_result.Data)
+ t.Fatal("response should not be empty")
+ } else {
+ currentEtag = cache_result.Etag
+ }
+
+ if cache_result, err := Client.GetChannelExtraInfo(channel1.Id, currentEtag); err != nil {
+ t.Fatal(err)
+ } else if cache_result.Data.(*model.ChannelExtra) != nil {
+ t.Log(cache_result.Data)
+ t.Fatal("response should be empty")
+ } else {
+ currentEtag = cache_result.Etag
+ }
}
func TestAddChannelMember(t *testing.T) {