tools: Add buildbucket package

Wraps the luci package to make it a bit friendlier.

Bug: dawn:1342
Change-Id: I80e02344ea1ecd95134a719f21eb8bd2a1cb1997
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/86527
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Kokoro: Kokoro <noreply+kokoro@google.com>
Commit-Queue: Ben Clayton <bclayton@google.com>
This commit is contained in:
Ben Clayton
2022-04-14 09:50:30 +00:00
committed by Dawn LUCI CQ
parent 76b189f5a9
commit 5827191cc5
6 changed files with 328 additions and 0 deletions

30
tools/src/utils/hash.go Normal file
View File

@@ -0,0 +1,30 @@
// Copyright 2022 The Tint Authors.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package utils
import (
"crypto/sha256"
"fmt"
)
// Hash returns a hash of the provided values
func Hash(values ...any) string {
h := sha256.New()
for _, v := range values {
h.Write([]byte(fmt.Sprintf("%T⬡%+v", v, v)))
h.Write([]byte{0})
}
return fmt.Sprintf("%x", h.Sum(nil))
}

View File

@@ -0,0 +1,45 @@
// Copyright 2022 The Tint Authors.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package utils_test
import (
"dawn.googlesource.com/dawn/tools/src/utils"
"testing"
)
func TestHash(t *testing.T) {
type Test struct {
a, b []any
expectEqual bool
}
for _, test := range []Test{
{a: []any{1}, b: []any{1}, expectEqual: true},
{a: []any{1}, b: []any{2}, expectEqual: false},
{a: []any{1}, b: []any{1.0}, expectEqual: false},
{a: []any{1.0}, b: []any{1.0}, expectEqual: true},
{a: []any{'x'}, b: []any{'x'}, expectEqual: true},
{a: []any{'x'}, b: []any{'y'}, expectEqual: false},
{a: []any{1, 2}, b: []any{1, 2}, expectEqual: true},
{a: []any{1, 2}, b: []any{1}, expectEqual: false},
{a: []any{1, 2}, b: []any{1, 3}, expectEqual: false},
} {
hashA := utils.Hash(test.a...)
hashB := utils.Hash(test.b...)
equal := hashA == hashB
if equal != test.expectEqual {
t.Errorf("Hash(%v): %v\nHash(%v): %v", test.a, hashA, test.b, hashB)
}
}
}

16
tools/src/utils/utils.go Normal file
View File

@@ -0,0 +1,16 @@
// Copyright 2022 The Tint Authors.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// Package utils contains small miscellaneous utilities.
package utils