github.com/mackerelio/mackerel-agent-plugins@v0.89.3/mackerel-plugin-apache2/lib/apache2_test.go (about)

     1  package mpapache2
     2  
     3  import (
     4  	"fmt"
     5  	"net/http"
     6  	"net/http/httptest"
     7  	"regexp"
     8  	"strconv"
     9  	"testing"
    10  
    11  	"github.com/stretchr/testify/assert"
    12  )
    13  
    14  func TestParseApache2Scoreboard(t *testing.T) {
    15  	stub := "Scoreboard: W._SRWKDCLGI...."
    16  	stat := make(map[string]interface{})
    17  
    18  	err := parseApache2Scoreboard(stub, &stat)
    19  	assert.Nil(t, err)
    20  	assert.EqualValues(t, stat["score-_"], 1)
    21  	assert.EqualValues(t, stat["score-S"], 1)
    22  	assert.EqualValues(t, stat["score-R"], 1)
    23  	assert.EqualValues(t, stat["score-W"], 2)
    24  	assert.EqualValues(t, stat["score-K"], 1)
    25  	assert.EqualValues(t, stat["score-D"], 1)
    26  	assert.EqualValues(t, stat["score-C"], 1)
    27  	assert.EqualValues(t, stat["score-L"], 1)
    28  	assert.EqualValues(t, stat["score-G"], 1)
    29  	assert.EqualValues(t, stat["score-I"], 1)
    30  	assert.EqualValues(t, stat["score-"], 5)
    31  }
    32  
    33  func TestParseApache2Status(t *testing.T) {
    34  	stub := `Total Accesses: 358
    35  Total kBytes: 20
    36  CPULoad: .00117358
    37  Uptime: 102251
    38  ReqPerSec: .00350119
    39  BytesPerSec: .200291
    40  BytesPerReq: 57.2067
    41  BusyWorkers: 1
    42  IdleWorkers: 4
    43  `
    44  	stat := make(map[string]interface{})
    45  
    46  	err := parseApache2Status(stub, &stat)
    47  	assert.Nil(t, err)
    48  	assert.EqualValues(t, stat["requests"], 358)
    49  	assert.EqualValues(t, stat["bytes_sent"], 20)
    50  	assert.EqualValues(t, stat["cpu_load"], 0.00117358)
    51  	assert.EqualValues(t, stat["busy_workers"], 1)
    52  	assert.EqualValues(t, stat["idle_workers"], 4)
    53  }
    54  
    55  func TestGetApache2Metrics_1(t *testing.T) {
    56  	stub := `Total Accesses: 668
    57  Total kBytes: 2789
    58  CPULoad: .000599374
    59  Uptime: 171846
    60  ReqPerSec: .0038872
    61  BytesPerSec: 16.6192
    62  BytesPerReq: 4275.35
    63  BusyWorkers: 1
    64  IdleWorkers: 3
    65  Scoreboard: W_.__...........................`
    66  
    67  	ts := httptest.NewServer(
    68  		http.HandlerFunc(
    69  			func(w http.ResponseWriter, r *http.Request) {
    70  				fmt.Fprintln(w, stub)
    71  			}))
    72  	defer ts.Close()
    73  	re, _ := regexp.Compile("([a-z]+)://([A-Za-z0-9.]+):([0-9]+)(.*)")
    74  	found := re.FindStringSubmatch(ts.URL)
    75  	assert.EqualValues(t, len(found), 5, fmt.Sprintf("Test stub uri format is changed. %s", ts.URL))
    76  
    77  	host := found[2]
    78  	port, _ := strconv.Atoi(found[3])
    79  	path := found[4]
    80  	header := []string{fmt.Sprintf("Host: %s", found[2]), "X-Text-Header: test"}
    81  
    82  	ret, err := getApache2Metrics(host, uint16(port), path, header)
    83  	assert.Nil(t, err)
    84  	assert.NotNil(t, ret)
    85  	assert.NotEmpty(t, ret)
    86  	assert.Contains(t, ret, "Total Accesses")
    87  	assert.Contains(t, ret, "Total kBytes")
    88  	assert.Contains(t, ret, "Uptime")
    89  	assert.Contains(t, ret, "BusyWorkers")
    90  	assert.Contains(t, ret, "IdleWorkers")
    91  	assert.Contains(t, ret, "Scoreboard")
    92  }