123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 |
- // Copyright 2014 Google Inc. All rights reserved.
- // Use of this source code is governed by the Apache 2.0
- // license that can be found in the LICENSE file.
- package log
- import (
- "reflect"
- "testing"
- "time"
- "github.com/golang/protobuf/proto"
- pb "google.golang.org/appengine/internal/log"
- )
- func TestQueryToRequest(t *testing.T) {
- testCases := []struct {
- desc string
- query *Query
- want *pb.LogReadRequest
- }{
- {
- desc: "Empty",
- query: &Query{},
- want: &pb.LogReadRequest{
- AppId: proto.String("s~fake"),
- VersionId: []string{"v12"},
- },
- },
- {
- desc: "Versions",
- query: &Query{
- Versions: []string{"alpha", "backend:beta"},
- },
- want: &pb.LogReadRequest{
- AppId: proto.String("s~fake"),
- ModuleVersion: []*pb.LogModuleVersion{
- {
- VersionId: proto.String("alpha"),
- }, {
- ModuleId: proto.String("backend"),
- VersionId: proto.String("beta"),
- },
- },
- },
- },
- }
- for _, tt := range testCases {
- req, err := makeRequest(tt.query, "s~fake", "v12")
- if err != nil {
- t.Errorf("%s: got err %v, want nil", tt.desc, err)
- continue
- }
- if !proto.Equal(req, tt.want) {
- t.Errorf("%s request:\ngot %v\nwant %v", tt.desc, req, tt.want)
- }
- }
- }
- func TestProtoToRecord(t *testing.T) {
- // We deliberately leave ModuleId and other optional fields unset.
- p := &pb.RequestLog{
- AppId: proto.String("s~fake"),
- VersionId: proto.String("1"),
- RequestId: []byte("deadbeef"),
- Ip: proto.String("127.0.0.1"),
- StartTime: proto.Int64(431044244000000),
- EndTime: proto.Int64(431044724000000),
- Latency: proto.Int64(480000000),
- Mcycles: proto.Int64(7),
- Method: proto.String("GET"),
- Resource: proto.String("/app"),
- HttpVersion: proto.String("1.1"),
- Status: proto.Int32(418),
- ResponseSize: proto.Int64(1337),
- UrlMapEntry: proto.String("_go_app"),
- Combined: proto.String("apache log"),
- }
- // Sanity check that all required fields are set.
- if _, err := proto.Marshal(p); err != nil {
- t.Fatalf("proto.Marshal: %v", err)
- }
- want := &Record{
- AppID: "s~fake",
- ModuleID: "default",
- VersionID: "1",
- RequestID: []byte("deadbeef"),
- IP: "127.0.0.1",
- StartTime: time.Date(1983, 8, 29, 22, 30, 44, 0, time.UTC),
- EndTime: time.Date(1983, 8, 29, 22, 38, 44, 0, time.UTC),
- Latency: 8 * time.Minute,
- MCycles: 7,
- Method: "GET",
- Resource: "/app",
- HTTPVersion: "1.1",
- Status: 418,
- ResponseSize: 1337,
- URLMapEntry: "_go_app",
- Combined: "apache log",
- Finished: true,
- AppLogs: []AppLog{},
- }
- got := protoToRecord(p)
- // Coerce locations to UTC since otherwise they will be in local.
- got.StartTime, got.EndTime = got.StartTime.UTC(), got.EndTime.UTC()
- if !reflect.DeepEqual(got, want) {
- t.Errorf("protoToRecord:\ngot: %v\nwant: %v", got, want)
- }
- }
|