// Copyright 2016 Google LLC // // 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 cloud import ( "bytes" "io/ioutil" "os" "path/filepath" "strings" "testing" ) var sentinels = []string{ "Copyright", "Google", `Licensed under the Apache License, Version 2.0 (the "License");`, } func TestLicense(t *testing.T) { t.Parallel() err := filepath.Walk(".", func(path string, fi os.FileInfo, err error) error { if err != nil { return err } if ext := filepath.Ext(path); ext != ".go" && ext != ".proto" { return nil } if strings.HasSuffix(path, ".pb.go") { // .pb.go files are generated from the proto files. // .proto files must have license headers. return nil } if path == "bigtable/cmd/cbt/cbtdoc.go" { // Automatically generated. return nil } if path == "cmd/go-cloud-debug-agent/internal/debug/elf/elf.go" { // BSD license, which is compatible, is embedded in the file. return nil } src, err := ioutil.ReadFile(path) if err != nil { return nil } src = src[:300] // Ensure all of the sentinel values are at the top of the file. // Find license for _, sentinel := range sentinels { if !bytes.Contains(src, []byte(sentinel)) { t.Errorf("%v: license header not present. want %q", path, sentinel) return nil } } return nil }) if err != nil { t.Fatal(err) } }