| // 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() |
| skip := map[string]bool{ |
| // Automatically generated. |
| "bigtable/cmd/cbt/cbtdoc.go": true, |
| |
| // BSD license, which is compatible, is embedded in the file. |
| "cmd/go-cloud-debug-agent/internal/debug/elf/elf.go": true, |
| |
| // From https://github.com/golang/pkgsite. |
| "third_party/pkgsite/print_type.go": true, |
| "third_party/pkgsite/synopsis.go": true, |
| "third_party/go/doc/comment.go": true, |
| "third_party/go/doc/comment_test.go": true, |
| "third_party/go/doc/doc.go": true, |
| "third_party/go/doc/example.go": true, |
| "third_party/go/doc/example_test.go": true, |
| "third_party/go/doc/exports.go": true, |
| "third_party/go/doc/filter.go": true, |
| "third_party/go/doc/headscan.go": true, |
| "third_party/go/doc/reader.go": true, |
| "third_party/go/doc/synopsis.go": true, |
| "third_party/go/doc/synopsis_test.go": true, |
| } |
| 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" && ext != ".sh" { |
| 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 skip[path] { |
| 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) |
| } |
| } |