Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2331)

Unified Diff: appengine/logdog/coordinator/endpoints/logs/get_test.go

Issue 1909073002: LogDog: Add project namespace to logs endpoint. (Closed) Base URL: https://github.com/luci/luci-go@logdog-project-storage
Patch Set: Rebase? Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: appengine/logdog/coordinator/endpoints/logs/get_test.go
diff --git a/appengine/logdog/coordinator/endpoints/logs/get_test.go b/appengine/logdog/coordinator/endpoints/logs/get_test.go
index fedd875b5b585b5416adb4396d9e789452a5fffb..e252ce7300f1f945ca362a9740569336173aab08 100644
--- a/appengine/logdog/coordinator/endpoints/logs/get_test.go
+++ b/appengine/logdog/coordinator/endpoints/logs/get_test.go
@@ -21,6 +21,7 @@ import (
ct "github.com/luci/luci-go/appengine/logdog/coordinator/coordinatorTest"
"github.com/luci/luci-go/common/api/logdog_coordinator/logs/v1"
"github.com/luci/luci-go/common/clock/testclock"
+ "github.com/luci/luci-go/common/config"
"github.com/luci/luci-go/common/gcloud/gs"
"github.com/luci/luci-go/common/iotools"
"github.com/luci/luci-go/common/logdog/types"
@@ -157,6 +158,7 @@ func testGetImpl(t *testing.T, archived bool) {
c = auth.WithState(c, &fs)
ms := memoryStorage.Storage{}
+
gsc := testGSClient{}
svcStub := ct.Services{
IS: func() (storage.Storage, error) {
@@ -170,12 +172,19 @@ func testGetImpl(t *testing.T, archived bool) {
svcStub.ServiceConfig.Coordinator.AdminAuthGroup = "test-administrators"
c = coordinator.WithServices(c, &svcStub)
- s := New()
+ svr := New()
+
+ // di is a datastore bound to the test project namespace.
+ const project = "test-project"
+ if err := coordinator.WithProjectNamespace(&c, config.ProjectName(project)); err != nil {
+ panic(err)
+ }
+ di := ds.Get(c)
// Generate our test stream.
desc := ct.TestLogStreamDescriptor(c, "foo/bar")
ls := ct.TestLogStream(c, desc)
- if err := ds.Get(c).Put(ls); err != nil {
+ if err := di.Put(ls); err != nil {
panic(err)
}
@@ -233,12 +242,20 @@ func testGetImpl(t *testing.T, archived bool) {
Convey(`Testing Get requests (no logs)`, func() {
req := logdog.GetRequest{
- Path: string(ls.Path()),
+ Project: project,
+ Path: string(ls.Path()),
}
+ Convey(`Will succeed with no logs.`, func() {
+ resp, err := svr.Get(c, &req)
+
+ So(err, ShouldBeRPCOK)
+ So(resp, shouldHaveLogs)
+ })
+
Convey(`Will fail if the Path is not a stream path or a hash.`, func() {
req.Path = "not/a/full/stream/path"
- _, err := s.Get(c, &req)
+ _, err := svr.Get(c, &req)
So(err, ShouldErrLike, "invalid path value")
})
@@ -246,339 +263,377 @@ func testGetImpl(t *testing.T, archived bool) {
c, fb := featureBreaker.FilterRDS(c, nil)
fb.BreakFeatures(errors.New("testing error"), "GetMulti")
- _, err := s.Get(c, &req)
+ _, err := svr.Get(c, &req)
So(err, ShouldBeRPCInternal)
})
- Convey(`Will fail with NotFound if the log stream does not exist.`, func() {
+ Convey(`Will fail with NotFound if the log stream does not exist (different project).`, func() {
+ req.Project = "does-not-exist"
+ _, err := svr.Get(c, &req)
+ So(err, ShouldBeRPCNotFound)
+ })
+
+ Convey(`Will fail with NotFound if the log path does not exist (different path).`, func() {
req.Path = "testing/+/does/not/exist"
- _, err := s.Get(c, &req)
+ _, err := svr.Get(c, &req)
So(err, ShouldBeRPCNotFound)
})
})
- if !archived {
- // Add the logs to the in-memory temporary storage.
- for _, le := range entries {
- err := ms.Put(storage.PutRequest{
- Path: ls.Path(),
- Index: types.MessageIndex(le.StreamIndex),
- Values: [][]byte{protobufs[le.StreamIndex]},
- })
- if err != nil {
- panic(fmt.Errorf("failed to Put() LogEntry: %v", err))
- }
+ Convey(`Testing Tail requests (no logs)`, func() {
+ req := logdog.TailRequest{
+ Project: project,
+ Path: string(ls.Path()),
}
- } else {
- // Archive this log stream. We will generate one index entry for every
- // 2 log entries.
- src := staticArchiveSource(entries)
- var lbuf, ibuf bytes.Buffer
- m := archive.Manifest{
- Desc: desc,
- Source: &src,
- LogWriter: &lbuf,
- IndexWriter: &ibuf,
- StreamIndexRange: 2,
+
+ Convey(`Will succeed with no logs.`, func() {
+ resp, err := svr.Tail(c, &req)
+
+ So(err, ShouldBeRPCOK)
+ So(resp, shouldHaveLogs)
+ })
+
+ Convey(`Will fail with NotFound if the log stream does not exist (different project).`, func() {
+ req.Project = "does-not-exist"
+ _, err := svr.Tail(c, &req)
+ So(err, ShouldBeRPCNotFound)
+ })
+
+ Convey(`Will fail with NotFound if the log path does not exist (different path).`, func() {
+ req.Path = "testing/+/does/not/exist"
+ _, err := svr.Tail(c, &req)
+ So(err, ShouldBeRPCNotFound)
+ })
+ })
+
+ Convey(`When testing log data is added`, func() {
+ if !archived {
+ // Add the logs to the in-memory temporary storage.
+ for _, le := range entries {
+ err := ms.Put(storage.PutRequest{
+ Project: project,
+ Path: ls.Path(),
+ Index: types.MessageIndex(le.StreamIndex),
+ Values: [][]byte{protobufs[le.StreamIndex]},
+ })
+ if err != nil {
+ panic(fmt.Errorf("failed to Put() LogEntry: %v", err))
+ }
+ }
+ } else {
+ // Archive this log stream. We will generate one index entry for every
+ // 2 log entries.
+ src := staticArchiveSource(entries)
+ var lbuf, ibuf bytes.Buffer
+ m := archive.Manifest{
+ Desc: desc,
+ Source: &src,
+ LogWriter: &lbuf,
+ IndexWriter: &ibuf,
+ StreamIndexRange: 2,
+ }
+ if err := archive.Archive(m); err != nil {
+ panic(err)
+ }
+
+ now := tc.Now().UTC()
+
+ gsc.put("gs://testbucket/stream", lbuf.Bytes())
+ gsc.put("gs://testbucket/index", ibuf.Bytes())
+ ls.State = coordinator.LSArchived
+ ls.TerminatedTime = now
+ ls.ArchivedTime = now
+ ls.ArchiveStreamURL = "gs://testbucket/stream"
+ ls.ArchiveIndexURL = "gs://testbucket/index"
}
- if err := archive.Archive(m); err != nil {
+ if err := di.Put(ls); err != nil {
panic(err)
}
- now := tc.Now().UTC()
+ Convey(`Testing Get requests`, func() {
+ req := logdog.GetRequest{
+ Project: project,
+ Path: string(ls.Path()),
+ }
- gsc.put("gs://testbucket/stream", lbuf.Bytes())
- gsc.put("gs://testbucket/index", ibuf.Bytes())
- ls.State = coordinator.LSArchived
- ls.TerminatedTime = now
- ls.ArchivedTime = now
- ls.ArchiveStreamURL = "gs://testbucket/stream"
- ls.ArchiveIndexURL = "gs://testbucket/index"
- }
- if err := ds.Get(c).Put(ls); err != nil {
- panic(err)
- }
+ Convey(`When the log stream is purged`, func() {
+ ls.Purged = true
+ if err := di.Put(ls); err != nil {
+ panic(err)
+ }
- Convey(`Testing Get requests`, func() {
- req := logdog.GetRequest{
- Path: string(ls.Path()),
- }
+ Convey(`Will return NotFound if the user is not an administrator.`, func() {
+ _, err := svr.Get(c, &req)
+ So(err, ShouldBeRPCNotFound)
+ })
- Convey(`When the log stream is purged`, func() {
- ls.Purged = true
- if err := ds.Get(c).Put(ls); err != nil {
- panic(err)
- }
+ Convey(`Will process the request if the user is an administrator.`, func() {
+ fs.IdentityGroups = []string{"test-administrators"}
- Convey(`Will return NotFound if the user is not an administrator.`, func() {
- _, err := s.Get(c, &req)
- So(err, ShouldBeRPCNotFound)
+ resp, err := svr.Get(c, &req)
+ So(err, ShouldBeRPCOK)
+ So(resp, shouldHaveLogs, 0, 1, 2)
+ })
})
- Convey(`Will process the request if the user is an administrator.`, func() {
- fs.IdentityGroups = []string{"test-administrators"}
+ Convey(`Will return empty if no records were requested.`, func() {
+ req.LogCount = -1
+ req.State = false
- resp, err := s.Get(c, &req)
+ resp, err := svr.Get(c, &req)
So(err, ShouldBeRPCOK)
- So(resp, shouldHaveLogs, 0, 1, 2)
+ So(resp.Logs, ShouldHaveLength, 0)
})
- })
- Convey(`Will return empty if no records were requested.`, func() {
- req.LogCount = -1
- req.State = false
+ Convey(`Will successfully retrieve a stream path.`, func() {
+ resp, err := svr.Get(c, &req)
+ So(err, ShouldBeRPCOK)
+ So(resp, shouldHaveLogs, 0, 1, 2)
+ })
- resp, err := s.Get(c, &req)
- So(err, ShouldBeRPCOK)
- So(resp.Logs, ShouldHaveLength, 0)
- })
+ Convey(`Will successfully retrieve a stream path offset at 4.`, func() {
+ req.Index = 4
- Convey(`Will successfully retrieve a stream path.`, func() {
- resp, err := s.Get(c, &req)
- So(err, ShouldBeRPCOK)
- So(resp, shouldHaveLogs, 0, 1, 2)
- })
+ resp, err := svr.Get(c, &req)
+ So(err, ShouldBeRPCOK)
+ So(resp, shouldHaveLogs, 4, 5)
+ })
- Convey(`Will successfully retrieve a stream path offset at 4.`, func() {
- req.Index = 4
+ Convey(`Will retrieve no logs for contiguous offset 6.`, func() {
+ req.Index = 6
- resp, err := s.Get(c, &req)
- So(err, ShouldBeRPCOK)
- So(resp, shouldHaveLogs, 4, 5)
- })
+ resp, err := svr.Get(c, &req)
+ So(err, ShouldBeRPCOK)
+ So(len(resp.Logs), ShouldEqual, 0)
+ })
- Convey(`Will retrieve no logs for contiguous offset 6.`, func() {
- req.Index = 6
+ Convey(`Will retrieve log 7 for non-contiguous offset 6.`, func() {
+ req.NonContiguous = true
+ req.Index = 6
- resp, err := s.Get(c, &req)
- So(err, ShouldBeRPCOK)
- So(len(resp.Logs), ShouldEqual, 0)
- })
+ resp, err := svr.Get(c, &req)
+ So(err, ShouldBeRPCOK)
+ So(resp, shouldHaveLogs, 7)
+ })
- Convey(`Will retrieve log 7 for non-contiguous offset 6.`, func() {
- req.NonContiguous = true
- req.Index = 6
+ Convey(`With a byte limit of 1, will still return at least one log entry.`, func() {
+ req.ByteCount = 1
- resp, err := s.Get(c, &req)
- So(err, ShouldBeRPCOK)
- So(resp, shouldHaveLogs, 7)
- })
+ resp, err := svr.Get(c, &req)
+ So(err, ShouldBeRPCOK)
+ So(resp, shouldHaveLogs, 0)
+ })
- Convey(`With a byte limit of 1, will still return at least one log entry.`, func() {
- req.ByteCount = 1
+ Convey(`With a byte limit of sizeof(0), will return log entry 0.`, func() {
+ req.ByteCount = frameSize(0)
- resp, err := s.Get(c, &req)
- So(err, ShouldBeRPCOK)
- So(resp, shouldHaveLogs, 0)
- })
+ resp, err := svr.Get(c, &req)
+ So(err, ShouldBeRPCOK)
+ So(resp, shouldHaveLogs, 0)
+ })
- Convey(`With a byte limit of sizeof(0), will return log entry 0.`, func() {
- req.ByteCount = frameSize(0)
+ Convey(`With a byte limit of sizeof(0)+1, will return log entry 0.`, func() {
+ req.ByteCount = frameSize(0) + 1
- resp, err := s.Get(c, &req)
- So(err, ShouldBeRPCOK)
- So(resp, shouldHaveLogs, 0)
- })
+ resp, err := svr.Get(c, &req)
+ So(err, ShouldBeRPCOK)
+ So(resp, shouldHaveLogs, 0)
+ })
- Convey(`With a byte limit of sizeof(0)+1, will return log entry 0.`, func() {
- req.ByteCount = frameSize(0) + 1
+ Convey(`With a byte limit of sizeof({0, 1}), will return log entries {0, 1}.`, func() {
+ req.ByteCount = frameSize(0, 1)
- resp, err := s.Get(c, &req)
- So(err, ShouldBeRPCOK)
- So(resp, shouldHaveLogs, 0)
- })
+ resp, err := svr.Get(c, &req)
+ So(err, ShouldBeRPCOK)
+ So(resp, shouldHaveLogs, 0, 1)
+ })
- Convey(`With a byte limit of sizeof({0, 1}), will return log entries {0, 1}.`, func() {
- req.ByteCount = frameSize(0, 1)
+ Convey(`With a byte limit of sizeof({0, 1, 2}), will return log entries {0, 1, 2}.`, func() {
+ req.ByteCount = frameSize(0, 1, 2)
- resp, err := s.Get(c, &req)
- So(err, ShouldBeRPCOK)
- So(resp, shouldHaveLogs, 0, 1)
- })
+ resp, err := svr.Get(c, &req)
+ So(err, ShouldBeRPCOK)
+ So(resp, shouldHaveLogs, 0, 1, 2)
+ })
- Convey(`With a byte limit of sizeof({0, 1, 2}), will return log entries {0, 1, 2}.`, func() {
- req.ByteCount = frameSize(0, 1, 2)
+ Convey(`With a byte limit of sizeof({0, 1, 2})+1, will return log entries {0, 1, 2}.`, func() {
+ req.ByteCount = frameSize(0, 1, 2) + 1
- resp, err := s.Get(c, &req)
- So(err, ShouldBeRPCOK)
- So(resp, shouldHaveLogs, 0, 1, 2)
- })
+ resp, err := svr.Get(c, &req)
+ So(err, ShouldBeRPCOK)
+ So(resp, shouldHaveLogs, 0, 1, 2)
+ })
- Convey(`With a byte limit of sizeof({0, 1, 2})+1, will return log entries {0, 1, 2}.`, func() {
- req.ByteCount = frameSize(0, 1, 2) + 1
+ Convey(`Will successfully retrieve a stream path hash.`, func() {
+ req.Path = ls.HashID
+ resp, err := svr.Get(c, &req)
+ So(err, ShouldBeRPCOK)
+ So(resp, shouldHaveLogs, 0, 1, 2)
+ })
- resp, err := s.Get(c, &req)
- So(err, ShouldBeRPCOK)
- So(resp, shouldHaveLogs, 0, 1, 2)
- })
+ Convey(`When requesting state`, func() {
+ req.State = true
+ req.LogCount = -1
- Convey(`Will successfully retrieve a stream path hash.`, func() {
- req.Path = ls.HashID
- resp, err := s.Get(c, &req)
- So(err, ShouldBeRPCOK)
- So(resp, shouldHaveLogs, 0, 1, 2)
- })
+ Convey(`Will successfully retrieve stream state.`, func() {
+ resp, err := svr.Get(c, &req)
+ So(err, ShouldBeRPCOK)
+ So(resp.State, ShouldResemble, loadLogStreamState(ls))
+ So(len(resp.Logs), ShouldEqual, 0)
+ })
- Convey(`When requesting state`, func() {
- req.State = true
- req.LogCount = -1
+ Convey(`Will return Internal if the protobuf descriptor data is corrupt.`, func() {
+ ls.SetDSValidate(false)
+ ls.Descriptor = []byte{0x00} // Invalid protobuf, zero tag.
+ if err := di.Put(ls); err != nil {
+ panic(err)
+ }
- Convey(`Will successfully retrieve stream state.`, func() {
- resp, err := s.Get(c, &req)
- So(err, ShouldBeRPCOK)
- So(resp.State, ShouldResemble, loadLogStreamState(ls))
- So(len(resp.Logs), ShouldEqual, 0)
+ _, err := svr.Get(c, &req)
+ So(err, ShouldBeRPCInternal)
+ })
})
- Convey(`Will return Internal if the protobuf descriptor data is corrupt.`, func() {
- ls.SetDSValidate(false)
- ls.Descriptor = []byte{0x00} // Invalid protobuf, zero tag.
- if err := ds.Get(c).Put(ls); err != nil {
- panic(err)
+ Convey(`Will return Internal if the protobuf log entry data is corrupt.`, func() {
+ if archived {
+ // Corrupt the archive datastream.
+ stream := gsc.get("gs://testbucket/stream")
+ zeroRecords(stream)
+ } else {
+ // Add corrupted entry to Storage. Create a new entry here, since
+ // the storage will reject a duplicate/overwrite.
+ err := ms.Put(storage.PutRequest{
+ Project: project,
+ Path: types.StreamPath(req.Path),
+ Index: 666,
+ Values: [][]byte{{0x00}}, // Invalid protobuf, zero tag.
+ })
+ if err != nil {
+ panic(err)
+ }
+ req.Index = 666
}
- _, err := s.Get(c, &req)
+ _, err := svr.Get(c, &req)
So(err, ShouldBeRPCInternal)
})
- })
- Convey(`Will return Internal if the protobuf log entry data is corrupt.`, func() {
- if archived {
- // Corrupt the archive datastream.
- stream := gsc.get("gs://testbucket/stream")
- zeroRecords(stream)
- } else {
- // Add corrupted entry to Storage. Create a new entry here, since
- // the storage will reject a duplicate/overwrite.
- err := ms.Put(storage.PutRequest{
- Path: types.StreamPath(req.Path),
- Index: 666,
- Values: [][]byte{{0x00}}, // Invalid protobuf, zero tag.
- })
- if err != nil {
- panic(err)
- }
- req.Index = 666
- }
-
- _, err := s.Get(c, &req)
- So(err, ShouldBeRPCInternal)
- })
+ Convey(`Will successfully retrieve both logs and stream state.`, func() {
+ req.State = true
- Convey(`Will successfully retrieve both logs and stream state.`, func() {
- req.State = true
-
- resp, err := s.Get(c, &req)
- So(err, ShouldBeRPCOK)
- So(resp.State, ShouldResemble, loadLogStreamState(ls))
- So(resp, shouldHaveLogs, 0, 1, 2)
- })
+ resp, err := svr.Get(c, &req)
+ So(err, ShouldBeRPCOK)
+ So(resp.State, ShouldResemble, loadLogStreamState(ls))
+ So(resp, shouldHaveLogs, 0, 1, 2)
+ })
- Convey(`Will return Internal if the Storage is not working.`, func() {
- if archived {
- gsc["error"] = []byte("test error")
- } else {
- ms.Close()
- }
+ Convey(`Will return Internal if the Storage is not working.`, func() {
+ if archived {
+ gsc["error"] = []byte("test error")
+ } else {
+ ms.Close()
+ }
- _, err := s.Get(c, &req)
- So(err, ShouldBeRPCInternal)
- })
+ _, err := svr.Get(c, &req)
+ So(err, ShouldBeRPCInternal)
+ })
- Convey(`Will enforce a maximum count of 2.`, func() {
- req.LogCount = 2
- resp, err := s.Get(c, &req)
- So(err, ShouldBeRPCOK)
- So(resp, shouldHaveLogs, 0, 1)
- })
+ Convey(`Will enforce a maximum count of 2.`, func() {
+ req.LogCount = 2
+ resp, err := svr.Get(c, &req)
+ So(err, ShouldBeRPCOK)
+ So(resp, shouldHaveLogs, 0, 1)
+ })
- Convey(`When requesting protobufs`, func() {
- req.State = true
+ Convey(`When requesting protobufs`, func() {
+ req.State = true
- resp, err := s.Get(c, &req)
- So(err, ShouldBeRPCOK)
- So(resp, shouldHaveLogs, 0, 1, 2)
+ resp, err := svr.Get(c, &req)
+ So(err, ShouldBeRPCOK)
+ So(resp, shouldHaveLogs, 0, 1, 2)
- // Confirm that this has protobufs.
- So(len(resp.Logs), ShouldEqual, 3)
- So(resp.Logs[0], ShouldNotBeNil)
+ // Confirm that this has protobufs.
+ So(len(resp.Logs), ShouldEqual, 3)
+ So(resp.Logs[0], ShouldNotBeNil)
- // Confirm that there is a descriptor protobuf.
- So(resp.Desc, ShouldResemble, desc)
+ // Confirm that there is a descriptor protobuf.
+ So(resp.Desc, ShouldResemble, desc)
- // Confirm that the state was returned.
- So(resp.State, ShouldNotBeNil)
- })
+ // Confirm that the state was returned.
+ So(resp.State, ShouldNotBeNil)
+ })
- Convey(`Will successfully retrieve all records if non-contiguous is allowed.`, func() {
- req.NonContiguous = true
- resp, err := s.Get(c, &req)
- So(err, ShouldBeRPCOK)
- So(resp, shouldHaveLogs, 0, 1, 2, 4, 5, 7)
- })
+ Convey(`Will successfully retrieve all records if non-contiguous is allowed.`, func() {
+ req.NonContiguous = true
+ resp, err := svr.Get(c, &req)
+ So(err, ShouldBeRPCOK)
+ So(resp, shouldHaveLogs, 0, 1, 2, 4, 5, 7)
+ })
- Convey(`When newlines are not requested, does not include delimiters.`, func() {
- req.LogCount = 1
+ Convey(`When newlines are not requested, does not include delimiters.`, func() {
+ req.LogCount = 1
- resp, err := s.Get(c, &req)
- So(err, ShouldBeRPCOK)
- So(resp, shouldHaveLogs, 0)
+ resp, err := svr.Get(c, &req)
+ So(err, ShouldBeRPCOK)
+ So(resp, shouldHaveLogs, 0)
- So(resp.Logs[0].GetText(), ShouldResemble, &logpb.Text{
- Lines: []*logpb.Text_Line{
- {"log entry #0", "\n"},
- {"another line of text", ""},
- },
+ So(resp.Logs[0].GetText(), ShouldResemble, &logpb.Text{
+ Lines: []*logpb.Text_Line{
+ {"log entry #0", "\n"},
+ {"another line of text", ""},
+ },
+ })
})
- })
- Convey(`Will get a Binary LogEntry`, func() {
- req.Index = 4
- req.LogCount = 1
- resp, err := s.Get(c, &req)
- So(err, ShouldBeRPCOK)
- So(resp, shouldHaveLogs, 4)
- So(resp.Logs[0].GetBinary(), ShouldResemble, &logpb.Binary{
- Data: []byte{0x00, 0x01, 0x02, 0x03},
+ Convey(`Will get a Binary LogEntry`, func() {
+ req.Index = 4
+ req.LogCount = 1
+ resp, err := svr.Get(c, &req)
+ So(err, ShouldBeRPCOK)
+ So(resp, shouldHaveLogs, 4)
+ So(resp.Logs[0].GetBinary(), ShouldResemble, &logpb.Binary{
+ Data: []byte{0x00, 0x01, 0x02, 0x03},
+ })
})
- })
- Convey(`Will get a Datagram LogEntry`, func() {
- req.Index = 5
- req.LogCount = 1
- resp, err := s.Get(c, &req)
- So(err, ShouldBeRPCOK)
- So(resp, shouldHaveLogs, 5)
- So(resp.Logs[0].GetDatagram(), ShouldResemble, &logpb.Datagram{
- Data: []byte{0x00, 0x01, 0x02, 0x03},
- Partial: &logpb.Datagram_Partial{
- Index: 2,
- Size: 1024,
- Last: false,
- },
+ Convey(`Will get a Datagram LogEntry`, func() {
+ req.Index = 5
+ req.LogCount = 1
+ resp, err := svr.Get(c, &req)
+ So(err, ShouldBeRPCOK)
+ So(resp, shouldHaveLogs, 5)
+ So(resp.Logs[0].GetDatagram(), ShouldResemble, &logpb.Datagram{
+ Data: []byte{0x00, 0x01, 0x02, 0x03},
+ Partial: &logpb.Datagram_Partial{
+ Index: 2,
+ Size: 1024,
+ Last: false,
+ },
+ })
})
})
- })
- Convey(`Testing tail requests`, func() {
- req := logdog.TailRequest{
- Path: string(ls.Path()),
- }
+ Convey(`Testing tail requests`, func() {
+ req := logdog.TailRequest{
+ Project: "test-project",
+ Path: string(ls.Path()),
+ }
- Convey(`Will successfully retrieve a stream path.`, func() {
- resp, err := s.Tail(c, &req)
- So(err, ShouldBeRPCOK)
- So(resp, shouldHaveLogs, 7)
- })
+ Convey(`Will successfully retrieve a stream path.`, func() {
+ resp, err := svr.Tail(c, &req)
+ So(err, ShouldBeRPCOK)
+ So(resp, shouldHaveLogs, 7)
+ })
- Convey(`Will successfully retrieve a stream path hash and state.`, func() {
- req.Path = ls.HashID
- req.State = true
+ Convey(`Will successfully retrieve a stream path hash and state.`, func() {
+ req.Path = ls.HashID
+ req.State = true
- resp, err := s.Tail(c, &req)
- So(err, ShouldBeRPCOK)
- So(resp, shouldHaveLogs, 7)
- So(resp.State, ShouldResemble, loadLogStreamState(ls))
+ resp, err := svr.Tail(c, &req)
+ So(err, ShouldBeRPCOK)
+ So(resp, shouldHaveLogs, 7)
+ So(resp.State, ShouldResemble, loadLogStreamState(ls))
+ })
})
})
})
@@ -593,5 +648,5 @@ func TestGetIntermediate(t *testing.T) {
func TestGetArchived(t *testing.T) {
t.Parallel()
- testGetImpl(t, true)
+ testGetImpl(t, false)
}
« no previous file with comments | « appengine/logdog/coordinator/endpoints/logs/get.go ('k') | appengine/logdog/coordinator/endpoints/logs/list.go » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698