185 lines
		
	
	
		
			6.0 KiB
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			185 lines
		
	
	
		
			6.0 KiB
		
	
	
	
		
			Go
		
	
	
	
| // +build linux
 | |
| 
 | |
| package kernel
 | |
| 
 | |
| import (
 | |
| 	"io/ioutil"
 | |
| 	"os"
 | |
| 	"testing"
 | |
| 
 | |
| 	"github.com/influxdata/telegraf/testutil"
 | |
| 
 | |
| 	"github.com/stretchr/testify/assert"
 | |
| )
 | |
| 
 | |
| func TestFullProcFile(t *testing.T) {
 | |
| 	tmpfile := makeFakeStatFile([]byte(statFile_Full))
 | |
| 	tmpfile2 := makeFakeStatFile([]byte(entropyStatFile_Full))
 | |
| 	defer os.Remove(tmpfile)
 | |
| 	defer os.Remove(tmpfile2)
 | |
| 
 | |
| 	k := Kernel{
 | |
| 		statFile:        tmpfile,
 | |
| 		entropyStatFile: tmpfile2,
 | |
| 	}
 | |
| 
 | |
| 	acc := testutil.Accumulator{}
 | |
| 	err := k.Gather(&acc)
 | |
| 	assert.NoError(t, err)
 | |
| 
 | |
| 	fields := map[string]interface{}{
 | |
| 		"boot_time":        int64(1457505775),
 | |
| 		"context_switches": int64(2626618),
 | |
| 		"disk_pages_in":    int64(5741),
 | |
| 		"disk_pages_out":   int64(1808),
 | |
| 		"interrupts":       int64(1472736),
 | |
| 		"processes_forked": int64(10673),
 | |
| 		"entropy_avail":    int64(1024),
 | |
| 	}
 | |
| 	acc.AssertContainsFields(t, "kernel", fields)
 | |
| }
 | |
| 
 | |
| func TestPartialProcFile(t *testing.T) {
 | |
| 	tmpfile := makeFakeStatFile([]byte(statFile_Partial))
 | |
| 	tmpfile2 := makeFakeStatFile([]byte(entropyStatFile_Partial))
 | |
| 	defer os.Remove(tmpfile)
 | |
| 	defer os.Remove(tmpfile2)
 | |
| 
 | |
| 	k := Kernel{
 | |
| 		statFile:        tmpfile,
 | |
| 		entropyStatFile: tmpfile2,
 | |
| 	}
 | |
| 
 | |
| 	acc := testutil.Accumulator{}
 | |
| 	err := k.Gather(&acc)
 | |
| 	assert.NoError(t, err)
 | |
| 
 | |
| 	fields := map[string]interface{}{
 | |
| 		"boot_time":        int64(1457505775),
 | |
| 		"context_switches": int64(2626618),
 | |
| 		"disk_pages_in":    int64(5741),
 | |
| 		"disk_pages_out":   int64(1808),
 | |
| 		"interrupts":       int64(1472736),
 | |
| 		"entropy_avail":    int64(1024),
 | |
| 	}
 | |
| 	acc.AssertContainsFields(t, "kernel", fields)
 | |
| }
 | |
| 
 | |
| func TestInvalidProcFile1(t *testing.T) {
 | |
| 	tmpfile := makeFakeStatFile([]byte(statFile_Invalid))
 | |
| 	tmpfile2 := makeFakeStatFile([]byte(entropyStatFile_Invalid))
 | |
| 	defer os.Remove(tmpfile)
 | |
| 	defer os.Remove(tmpfile2)
 | |
| 
 | |
| 	k := Kernel{
 | |
| 		statFile:        tmpfile,
 | |
| 		entropyStatFile: tmpfile2,
 | |
| 	}
 | |
| 
 | |
| 	acc := testutil.Accumulator{}
 | |
| 	err := k.Gather(&acc)
 | |
| 	assert.Error(t, err)
 | |
| }
 | |
| 
 | |
| func TestInvalidProcFile2(t *testing.T) {
 | |
| 	tmpfile := makeFakeStatFile([]byte(statFile_Invalid2))
 | |
| 	defer os.Remove(tmpfile)
 | |
| 
 | |
| 	k := Kernel{
 | |
| 		statFile: tmpfile,
 | |
| 	}
 | |
| 
 | |
| 	acc := testutil.Accumulator{}
 | |
| 	err := k.Gather(&acc)
 | |
| 	assert.Error(t, err)
 | |
| }
 | |
| 
 | |
| func TestNoProcFile(t *testing.T) {
 | |
| 	tmpfile := makeFakeStatFile([]byte(statFile_Invalid2))
 | |
| 	os.Remove(tmpfile)
 | |
| 
 | |
| 	k := Kernel{
 | |
| 		statFile: tmpfile,
 | |
| 	}
 | |
| 
 | |
| 	acc := testutil.Accumulator{}
 | |
| 	err := k.Gather(&acc)
 | |
| 	assert.Error(t, err)
 | |
| 	assert.Contains(t, err.Error(), "does not exist")
 | |
| }
 | |
| 
 | |
| const statFile_Full = `cpu  6796 252 5655 10444977 175 0 101 0 0 0
 | |
| cpu0 6796 252 5655 10444977 175 0 101 0 0 0
 | |
| intr 1472736 57 10 0 0 0 0 0 0 0 0 0 0 156 0 0 0 0 0 0 111551 42541 12356 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
 | |
| ctxt 2626618
 | |
| btime 1457505775
 | |
| processes 10673
 | |
| procs_running 2
 | |
| procs_blocked 0
 | |
| softirq 1031662 0 649485 20946 111071 11620 0 1 0 994 237545
 | |
| page 5741 1808
 | |
| swap 1 0
 | |
| entropy_avail 1024
 | |
| `
 | |
| 
 | |
| const statFile_Partial = `cpu  6796 252 5655 10444977 175 0 101 0 0 0
 | |
| cpu0 6796 252 5655 10444977 175 0 101 0 0 0
 | |
| intr 1472736 57 10 0 0 0 0 0 0 0 0 0 0 156 0 0 0 0 0 0 111551 42541 12356 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
 | |
| ctxt 2626618
 | |
| btime 1457505775
 | |
| procs_running 2
 | |
| procs_blocked 0
 | |
| softirq 1031662 0 649485 20946 111071 11620 0 1 0 994 237545
 | |
| page 5741 1808
 | |
| `
 | |
| 
 | |
| // missing btime measurement
 | |
| const statFile_Invalid = `cpu  6796 252 5655 10444977 175 0 101 0 0 0
 | |
| cpu0 6796 252 5655 10444977 175 0 101 0 0 0
 | |
| intr 1472736 57 10 0 0 0 0 0 0 0 0 0 0 156 0 0 0 0 0 0 111551 42541 12356 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
 | |
| ctxt 2626618
 | |
| btime
 | |
| processes 10673
 | |
| procs_running 2
 | |
| procs_blocked 0
 | |
| softirq 1031662 0 649485 20946 111071 11620 0 1 0 994 237545
 | |
| page 5741 1808
 | |
| swap 1 0
 | |
| entropy_avail 1024
 | |
| `
 | |
| 
 | |
| // missing second page measurement
 | |
| const statFile_Invalid2 = `cpu  6796 252 5655 10444977 175 0 101 0 0 0
 | |
| cpu0 6796 252 5655 10444977 175 0 101 0 0 0
 | |
| intr 1472736 57 10 0 0 0 0 0 0 0 0 0 0 156 0 0 0 0 0 0 111551 42541 12356 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
 | |
| ctxt 2626618
 | |
| processes 10673
 | |
| procs_running 2
 | |
| page 5741
 | |
| procs_blocked 0
 | |
| softirq 1031662 0 649485 20946 111071 11620 0 1 0 994 237545
 | |
| entropy_avail 1024 2048
 | |
| `
 | |
| 
 | |
| const entropyStatFile_Full = `1024`
 | |
| 
 | |
| const entropyStatFile_Partial = `1024`
 | |
| 
 | |
| const entropyStatFile_Invalid = ``
 | |
| 
 | |
| func makeFakeStatFile(content []byte) string {
 | |
| 	tmpfile, err := ioutil.TempFile("", "kernel_test")
 | |
| 	if err != nil {
 | |
| 		panic(err)
 | |
| 	}
 | |
| 
 | |
| 	if _, err := tmpfile.Write(content); err != nil {
 | |
| 		panic(err)
 | |
| 	}
 | |
| 	if err := tmpfile.Close(); err != nil {
 | |
| 		panic(err)
 | |
| 	}
 | |
| 
 | |
| 	return tmpfile.Name()
 | |
| }
 |