Skip to content

Commit

Permalink
Fixing tests for Windows
Browse files Browse the repository at this point in the history
Fixing the config/config_test, the discovery/file/file_test and the
promql/promql_test tests for Windows. For most of the tests, the fix involved
correct handling of path separators. In the case of the promql tests, the
issue was related to the removal of the temporal directories used by the
storage. The issue is that the RemoveAll() call returns an error when it
tries to remove a directory which is not empty, which seems to be true due to
some kind of process that is still running after closing the storage. To fix
it I added some retries to the remove of the temporal directories.
Adding tags file from Universal Ctags to .gitignore
  • Loading branch information
pafuent committed Jul 9, 2017
1 parent be990c0 commit 902fafb
Show file tree
Hide file tree
Showing 9 changed files with 109 additions and 17 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
.*.swo
*.iml
.idea
tags

/prometheus
/promtool
Expand Down
27 changes: 27 additions & 0 deletions config/config_non_windows_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
// Copyright 2015 The Prometheus 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.

// +build !windows

package config

const ruleFilesConfigFile = "testdata/rules_abs_path.good.yml"
var ruleFilesExpectedConf = &Config{
GlobalConfig: DefaultGlobalConfig,
RuleFiles: []string{
"testdata/first.rules",
"testdata/rules/second.rules",
"/absolute/third.rules",
},
original: "",
}
45 changes: 34 additions & 11 deletions config/config_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ import (
"encoding/json"
"io/ioutil"
"net/url"
"path/filepath"
"reflect"
"regexp"
"strings"
Expand Down Expand Up @@ -48,9 +49,8 @@ var expectedConf = &Config{
},

RuleFiles: []string{
"testdata/first.rules",
"/absolute/second.rules",
"testdata/my/*.rules",
filepath.FromSlash("testdata/first.rules"),
filepath.FromSlash("testdata/my/*.rules"),
},

RemoteWriteConfigs: []*RemoteWriteConfig{
Expand Down Expand Up @@ -85,7 +85,7 @@ var expectedConf = &Config{
Scheme: DefaultScrapeConfig.Scheme,

HTTPClientConfig: HTTPClientConfig{
BearerTokenFile: "testdata/valid_token_file",
BearerTokenFile: filepath.FromSlash("testdata/valid_token_file"),
},

ServiceDiscoveryConfig: ServiceDiscoveryConfig{
Expand Down Expand Up @@ -252,9 +252,9 @@ var expectedConf = &Config{
TagSeparator: DefaultConsulSDConfig.TagSeparator,
Scheme: "https",
TLSConfig: TLSConfig{
CertFile: "testdata/valid_cert_file",
KeyFile: "testdata/valid_key_file",
CAFile: "testdata/valid_ca_file",
CertFile: filepath.FromSlash("testdata/valid_cert_file"),
KeyFile: filepath.FromSlash("testdata/valid_key_file"),
CAFile: filepath.FromSlash("testdata/valid_ca_file"),
InsecureSkipVerify: false,
},
},
Expand Down Expand Up @@ -283,8 +283,8 @@ var expectedConf = &Config{

HTTPClientConfig: HTTPClientConfig{
TLSConfig: TLSConfig{
CertFile: "testdata/valid_cert_file",
KeyFile: "testdata/valid_key_file",
CertFile: filepath.FromSlash("testdata/valid_cert_file"),
KeyFile: filepath.FromSlash("testdata/valid_key_file"),
},

BearerToken: "mysecret",
Expand Down Expand Up @@ -354,8 +354,8 @@ var expectedConf = &Config{
Timeout: model.Duration(30 * time.Second),
RefreshInterval: model.Duration(30 * time.Second),
TLSConfig: TLSConfig{
CertFile: "testdata/valid_cert_file",
KeyFile: "testdata/valid_key_file",
CertFile: filepath.FromSlash("testdata/valid_cert_file"),
KeyFile: filepath.FromSlash("testdata/valid_key_file"),
},
},
},
Expand Down Expand Up @@ -549,6 +549,29 @@ func TestLoadConfig(t *testing.T) {

}

func TestLoadConfigRuleFilesAbsolutePath(t *testing.T) {
// Parse a valid file that sets a rule files with an absolute path
c, err := LoadFile(ruleFilesConfigFile)
if err != nil {
t.Errorf("Error parsing %s: %s", ruleFilesConfigFile, err)
}

bgot, err := yaml.Marshal(c)
if err != nil {
t.Fatalf("%s", err)
}

bexp, err := yaml.Marshal(ruleFilesExpectedConf)
if err != nil {
t.Fatalf("%s", err)
}
ruleFilesExpectedConf.original = c.original

if !reflect.DeepEqual(c, ruleFilesExpectedConf) {
t.Fatalf("%s: unexpected config result: \n\n%s\n expected\n\n%s", ruleFilesConfigFile, bgot, bexp)
}
}

var expectedErrors = []struct {
filename string
errMsg string
Expand Down
25 changes: 25 additions & 0 deletions config/config_windows_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
// Copyright 2015 The Prometheus 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 config

const ruleFilesConfigFile = "testdata/rules_abs_path_windows.good.yml"
var ruleFilesExpectedConf = &Config{
GlobalConfig: DefaultGlobalConfig,
RuleFiles: []string{
"testdata\\first.rules",
"testdata\\rules\\second.rules",
"c:\\absolute\\third.rules",
},
original: "",
}
1 change: 0 additions & 1 deletion config/testdata/conf.good.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ global:

rule_files:
- "first.rules"
- "/absolute/second.rules"
- "my/*.rules"

remote_write:
Expand Down
4 changes: 4 additions & 0 deletions config/testdata/rules_abs_path.good.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
rule_files:
- 'first.rules'
- 'rules/second.rules'
- '/absolute/third.rules'
4 changes: 4 additions & 0 deletions config/testdata/rules_abs_path_windows.good.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
rule_files:
- 'first.rules'
- 'rules\second.rules'
- 'c:\absolute\third.rules'
5 changes: 3 additions & 2 deletions discovery/file/file_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ import (
"fmt"
"io"
"os"
"path/filepath"
"testing"
"time"

Expand Down Expand Up @@ -89,12 +90,12 @@ retry:
if _, ok := tg.Labels["foo"]; !ok {
t.Fatalf("Label not parsed")
}
if tg.String() != fmt.Sprintf("fixtures/_test%s:0", ext) {
if tg.String() != filepath.FromSlash(fmt.Sprintf("fixtures/_test%s:0", ext)) {
t.Fatalf("Unexpected target group %s", tg)
}

tg = tgs[1]
if tg.String() != fmt.Sprintf("fixtures/_test%s:1", ext) {
if tg.String() != filepath.FromSlash(fmt.Sprintf("fixtures/_test%s:1", ext)) {
t.Fatalf("Unexpected target groups %s", tg)
}
break retry
Expand Down
14 changes: 11 additions & 3 deletions util/testutil/directory.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,9 @@ const (

// NilCloser is a no-op Closer.
NilCloser = nilCloser(true)

// The number of times that a TemporaryDirectory will retry its removal
temporaryDirectoryRemoveRetries = 2
)

type (
Expand Down Expand Up @@ -84,15 +87,20 @@ func NewCallbackCloser(fn func()) Closer {
}

func (t temporaryDirectory) Close() {
retries := temporaryDirectoryRemoveRetries
err := os.RemoveAll(t.path)
if err != nil {
for err != nil && retries > 0 {
switch {
case os.IsNotExist(err):
return
err = nil
default:
t.tester.Fatal(err)
retries--
err = os.RemoveAll(t.path)
}
}
if err != nil {
t.tester.Fatal(err)
}
}

func (t temporaryDirectory) Path() string {
Expand Down

0 comments on commit 902fafb

Please sign in to comment.