// Copyright 2019 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 aix darwin dragonfly freebsd linux netbsd openbsd solaris // +build 386 arm mips mipsle package procfs import ( "testing" "github.com/google/go-cmp/cmp" "golang.org/x/sys/unix" ) func TestProcMaps(t *testing.T) { tsts32 := []*ProcMap{ { StartAddr: 0x08048000, EndAddr: 0x08089000, Perms: &ProcMapPermissions{true, false, true, false, true}, Offset: 0, Dev: unix.Mkdev(0x03, 0x01), Inode: 104219, Pathname: "/bin/tcsh", }, { StartAddr: 0x08089000, EndAddr: 0x0808c000, Perms: &ProcMapPermissions{true, true, false, false, true}, Offset: 266240, Dev: unix.Mkdev(0x03, 0x01), Inode: 104219, Pathname: "/bin/tcsh", }, { StartAddr: 0x0808c000, EndAddr: 0x08146000, Perms: &ProcMapPermissions{true, true, true, false, true}, Offset: 0, Dev: unix.Mkdev(0x00, 0x00), Inode: 0, Pathname: "", }, { StartAddr: 0x40000000, EndAddr: 0x40015000, Perms: &ProcMapPermissions{true, false, true, false, true}, Offset: 0, Dev: unix.Mkdev(0x03, 0x01), Inode: 61874, Pathname: "/lib/ld-2.3.2.so", }, } // 32-bit test pid and fixtures tpid := 26234 tsts := tsts32 p, err := getProcFixtures(t).Proc(tpid) if err != nil { t.Fatal(err) } maps, err := p.ProcMaps() if err != nil { t.Fatal(err) } if want, have := len(maps), len(tsts); want > have { t.Errorf("want at least %d parsed proc/map entries, have %d", want, have) } for idx, tst := range tsts { want, got := tst, maps[idx] if diff := cmp.Diff(want, got); diff != "" { t.Fatalf("unexpected proc/map entry (-want +got):\n%s", diff) } } }