go.chromium.org/luci@v0.0.0-20240309015107-7cdc2e660f33/cipd/appengine/impl/accesslog/interceptor_test.go (about)

     1  // Copyright 2021 The LUCI Authors.
     2  //
     3  // Licensed under the Apache License, Version 2.0 (the "License");
     4  // you may not use this file except in compliance with the License.
     5  // You may obtain a copy of the License at
     6  //
     7  //      http://www.apache.org/licenses/LICENSE-2.0
     8  //
     9  // Unless required by applicable law or agreed to in writing, software
    10  // distributed under the License is distributed on an "AS IS" BASIS,
    11  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    12  // See the License for the specific language governing permissions and
    13  // limitations under the License.
    14  
    15  package accesslog
    16  
    17  import (
    18  	"strings"
    19  	"testing"
    20  
    21  	"google.golang.org/protobuf/proto"
    22  
    23  	cipdpb "go.chromium.org/luci/cipd/api/cipd/v1"
    24  	"go.chromium.org/luci/cipd/common"
    25  )
    26  
    27  func TestFields(t *testing.T) {
    28  	t.Parallel()
    29  
    30  	obj := &cipdpb.ObjectRef{
    31  		HashAlgo:  cipdpb.HashAlgo_SHA256,
    32  		HexDigest: strings.Repeat("a", 64),
    33  	}
    34  	iid := common.ObjectRefToInstanceID(obj)
    35  	pfx := "some/prefix"
    36  	pkg := "some/package"
    37  
    38  	tags := []*cipdpb.Tag{
    39  		{Key: "k1", Value: "v1"},
    40  		{Key: "k2", Value: "v2"},
    41  	}
    42  	tagsStr := []string{"k1:v1", "k2:v2"}
    43  
    44  	ref := "some-ref"
    45  
    46  	md := []*cipdpb.InstanceMetadata{
    47  		{Key: "mk1", Value: []byte("zzz")},
    48  		{Key: "mk2", Value: []byte("zzz")},
    49  	}
    50  	mdStr := []string{"mk1", "mk2"}
    51  
    52  	cases := []struct {
    53  		req any
    54  		exp *cipdpb.AccessLogEntry
    55  	}{
    56  		{
    57  			&cipdpb.GetObjectURLRequest{Object: obj},
    58  			&cipdpb.AccessLogEntry{Instance: iid},
    59  		},
    60  		{
    61  			&cipdpb.BeginUploadRequest{Object: obj},
    62  			&cipdpb.AccessLogEntry{Instance: iid},
    63  		},
    64  		{
    65  			&cipdpb.PrefixRequest{Prefix: pfx},
    66  			&cipdpb.AccessLogEntry{Package: pfx},
    67  		},
    68  		{
    69  			&cipdpb.PrefixMetadata{Prefix: pfx},
    70  			&cipdpb.AccessLogEntry{Package: pfx},
    71  		},
    72  		{
    73  			&cipdpb.ListPrefixRequest{Prefix: pfx},
    74  			&cipdpb.AccessLogEntry{Package: pfx},
    75  		},
    76  		{
    77  			&cipdpb.PackageRequest{Package: pkg},
    78  			&cipdpb.AccessLogEntry{Package: pkg},
    79  		},
    80  		{
    81  			&cipdpb.Instance{Package: pkg, Instance: obj},
    82  			&cipdpb.AccessLogEntry{Package: pkg, Instance: iid},
    83  		},
    84  		{
    85  			&cipdpb.ListInstancesRequest{Package: pkg},
    86  			&cipdpb.AccessLogEntry{Package: pkg},
    87  		},
    88  		{
    89  			&cipdpb.SearchInstancesRequest{Package: pkg, Tags: tags},
    90  			&cipdpb.AccessLogEntry{Package: pkg, Tags: tagsStr},
    91  		},
    92  		{
    93  			&cipdpb.Ref{Package: pkg, Instance: obj, Name: ref},
    94  			&cipdpb.AccessLogEntry{Package: pkg, Instance: iid, Version: ref},
    95  		},
    96  		{
    97  			&cipdpb.DeleteRefRequest{Package: pkg, Name: ref},
    98  			&cipdpb.AccessLogEntry{Package: pkg, Version: ref},
    99  		},
   100  		{
   101  			&cipdpb.ListRefsRequest{Package: pkg},
   102  			&cipdpb.AccessLogEntry{Package: pkg},
   103  		},
   104  		{
   105  			&cipdpb.AttachTagsRequest{Package: pkg, Instance: obj, Tags: tags},
   106  			&cipdpb.AccessLogEntry{Package: pkg, Instance: iid, Tags: tagsStr},
   107  		},
   108  		{
   109  			&cipdpb.DetachTagsRequest{Package: pkg, Instance: obj, Tags: tags},
   110  			&cipdpb.AccessLogEntry{Package: pkg, Instance: iid, Tags: tagsStr},
   111  		},
   112  		{
   113  			&cipdpb.AttachMetadataRequest{Package: pkg, Instance: obj, Metadata: md},
   114  			&cipdpb.AccessLogEntry{Package: pkg, Instance: iid, Metadata: mdStr},
   115  		},
   116  		{
   117  			&cipdpb.DetachMetadataRequest{Package: pkg, Instance: obj, Metadata: md},
   118  			&cipdpb.AccessLogEntry{Package: pkg, Instance: iid, Metadata: mdStr},
   119  		},
   120  		{
   121  			&cipdpb.ListMetadataRequest{Package: pkg, Instance: obj, Keys: mdStr},
   122  			&cipdpb.AccessLogEntry{Package: pkg, Instance: iid, Metadata: mdStr},
   123  		},
   124  		{
   125  			&cipdpb.ResolveVersionRequest{Package: pkg, Version: ref},
   126  			&cipdpb.AccessLogEntry{Package: pkg, Version: ref},
   127  		},
   128  		{
   129  			&cipdpb.GetInstanceURLRequest{Package: pkg, Instance: obj},
   130  			&cipdpb.AccessLogEntry{Package: pkg, Instance: iid},
   131  		},
   132  		{
   133  			&cipdpb.DescribeInstanceRequest{
   134  				Package:            pkg,
   135  				Instance:           obj,
   136  				DescribeRefs:       true,
   137  				DescribeTags:       true,
   138  				DescribeProcessors: true,
   139  				DescribeMetadata:   true,
   140  			},
   141  			&cipdpb.AccessLogEntry{
   142  				Package:  pkg,
   143  				Instance: iid,
   144  				Flags:    []string{"refs", "tags", "processors", "metadata"},
   145  			},
   146  		},
   147  		{
   148  			&cipdpb.DescribeClientRequest{Package: pkg, Instance: obj},
   149  			&cipdpb.AccessLogEntry{Package: pkg, Instance: iid},
   150  		},
   151  	}
   152  
   153  	for _, c := range cases {
   154  		got := &cipdpb.AccessLogEntry{}
   155  		extractFieldsFromRequest(got, c.req)
   156  		if !proto.Equal(got, c.exp) {
   157  			t.Errorf("%s: %s != %s", c.req, got, c.exp)
   158  		}
   159  	}
   160  }