diff --git a/collector/bonding_linux.go b/collector/bonding_linux.go index 8720d89a..a9bbcb26 100644 --- a/collector/bonding_linux.go +++ b/collector/bonding_linux.go @@ -25,10 +25,6 @@ import ( "github.com/prometheus/client_golang/prometheus" ) -const ( - sysfsNet = "/sys/class/net" -) - type bondingCollector struct { slaves, active *prometheus.GaugeVec } @@ -62,7 +58,7 @@ func NewBondingCollector() (Collector, error) { // Update reads and exposes bonding states, implements Collector interface. Caution: This works only on linux. func (c *bondingCollector) Update(ch chan<- prometheus.Metric) (err error) { - bondingStats, err := readBondingStats(sysfsNet) + bondingStats, err := readBondingStats(sysFilePath("class/net")) if err != nil { return err } diff --git a/collector/procpath.go b/collector/paths.go similarity index 85% rename from collector/procpath.go rename to collector/paths.go index ed3d372e..f97e2147 100644 --- a/collector/procpath.go +++ b/collector/paths.go @@ -23,8 +23,13 @@ import ( var ( // The path of the proc filesystem. procPath = flag.String("collector.procfs", procfs.DefaultMountPoint, "procfs mountpoint.") + sysPath = flag.String("collector.sysfs", "/sys", "sysfs mountpoint.") ) func procFilePath(name string) string { return path.Join(*procPath, name) } + +func sysFilePath(name string) string { + return path.Join(*sysPath, name) +} diff --git a/collector/paths_test.go b/collector/paths_test.go new file mode 100644 index 00000000..a4f41662 --- /dev/null +++ b/collector/paths_test.go @@ -0,0 +1,77 @@ +// 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 collector + +import ( + "flag" + "testing" + + "github.com/prometheus/procfs" +) + +func TestDefaultProcPath(t *testing.T) { + if err := flag.Set("collector.procfs", procfs.DefaultMountPoint); err != nil { + t.Fatal(err) + } + + if got, want := procFilePath("somefile"), "/proc/somefile"; got != want { + t.Errorf("Expected: %s, Got: %s", want, got) + } + + if got, want := procFilePath("some/file"), "/proc/some/file"; got != want { + t.Errorf("Expected: %s, Got: %s", want, got) + } +} + +func TestCustomProcPath(t *testing.T) { + if err := flag.Set("collector.procfs", "./../some/./place/"); err != nil { + t.Fatal(err) + } + + if got, want := procFilePath("somefile"), "../some/place/somefile"; got != want { + t.Errorf("Expected: %s, Got: %s", want, got) + } + + if got, want := procFilePath("some/file"), "../some/place/some/file"; got != want { + t.Errorf("Expected: %s, Got: %s", want, got) + } +} + +func TestDefaultSysPath(t *testing.T) { + if err := flag.Set("collector.sysfs", "/sys"); err != nil { + t.Fatal(err) + } + + if got, want := sysFilePath("somefile"), "/sys/somefile"; got != want { + t.Errorf("Expected: %s, Got: %s", want, got) + } + + if got, want := sysFilePath("some/file"), "/sys/some/file"; got != want { + t.Errorf("Expected: %s, Got: %s", want, got) + } +} + +func TestCustomSysPath(t *testing.T) { + if err := flag.Set("collector.sysfs", "./../some/./place/"); err != nil { + t.Fatal(err) + } + + if got, want := sysFilePath("somefile"), "../some/place/somefile"; got != want { + t.Errorf("Expected: %s, Got: %s", want, got) + } + + if got, want := sysFilePath("some/file"), "../some/place/some/file"; got != want { + t.Errorf("Expected: %s, Got: %s", want, got) + } +}