thrawn01/args

View on GitHub
benchmark/benchmark_test.go

Summary

Maintainability
D
2 days
Test Coverage
package benchmark_test

import (
    "net/http"
    "net/http/httptest"
    "testing"

    . "github.com/onsi/ginkgo"
    . "github.com/onsi/gomega"
    . "github.com/thrawn01/args/benchmark"
)

func TestApi(t *testing.T) {
    RegisterFailHandler(Fail)
    RunSpecs(t, "Test-api Suite")
}

const benchCount = 1000000

var _ = Describe("ParserBench", func() {
    var server http.Handler
    var req *http.Request
    var resp *httptest.ResponseRecorder
    var api *Api

    BeforeEach(func() {
        api = &Api{NewParserBench(OptValues{"test-value": "value"})}
        // And init the server
        server = api.NewServer()
        // Record HTTP responses.
        resp = httptest.NewRecorder()
    })

    Describe("SetOpts", func() {
        Context("when setting new values in a go routine", func() {
            It("should result in data race", func() {
                /*go func() {
                    api.Parser.SetOpts(OptValues{"test-value": "new"})
                }()*/
                req, _ = http.NewRequest("GET", "/", nil)
                server.ServeHTTP(resp, req)
                Expect(resp.Code).To(Equal(200))
                Expect(resp.Body.String()).To(Equal("TestValue: value"))
            })
        })
    })
    Measure("should run efficiently", func(b Benchmarker) {
        b.Time("runtime", func() {
            for i := 0; i < benchCount; i++ {
                resp = httptest.NewRecorder()
                req, _ = http.NewRequest("GET", "/", nil)
                server.ServeHTTP(resp, req)
                Expect(resp.Code).To(Equal(200))
                Expect(resp.Body.String()).To(Equal("TestValue: value"))
            }
        })
    }, 1)
})

var _ = Describe("ParserBenchMutex", func() {
    var server http.Handler
    var req *http.Request
    var resp *httptest.ResponseRecorder
    var api *Api

    BeforeEach(func() {
        api = &Api{NewParserBenchMutex(OptValues{"test-value": "value"})}
        // And init the server
        server = api.NewServer()
        // Record HTTP responses.
        resp = httptest.NewRecorder()
    })

    Describe("SetOpts", func() {
        Context("when setting new values in a go routine", func() {
            It("should NOT result in data race", func() {
                /*go func() {
                    api.Parser.SetOpts(OptValues{"test-value": "new"})
                }()*/
                req, _ = http.NewRequest("GET", "/", nil)
                server.ServeHTTP(resp, req)
                Expect(resp.Code).To(Equal(200))
                Expect(resp.Body.String()).To(Equal("TestValue: value"))
            })
        })
    })
    Measure("should run efficiently", func(b Benchmarker) {
        b.Time("runtime", func() {
            for i := 0; i < benchCount; i++ {
                resp = httptest.NewRecorder()
                req, _ = http.NewRequest("GET", "/", nil)
                server.ServeHTTP(resp, req)
                Expect(resp.Code).To(Equal(200))
                Expect(resp.Body.String()).To(Equal("TestValue: value"))
            }
        })
    }, 1)
})

var _ = Describe("ParserBenchRWMutex", func() {
    var server http.Handler
    var req *http.Request
    var resp *httptest.ResponseRecorder
    var api *Api

    BeforeEach(func() {
        api = &Api{NewParserBenchRWMutex(OptValues{"test-value": "value"})}
        // And init the server
        server = api.NewServer()
        // Record HTTP responses.
        resp = httptest.NewRecorder()
    })

    Describe("SetOpts", func() {
        Context("when setting new values in a go routine", func() {
            It("should NOT result in data race", func() {
                /*go func() {
                    api.Parser.SetOpts(OptValues{"test-value": "new"})
                }()*/
                req, _ = http.NewRequest("GET", "/", nil)
                server.ServeHTTP(resp, req)
                Expect(resp.Code).To(Equal(200))
                Expect(resp.Body.String()).To(Equal("TestValue: value"))
            })
        })
    })
    Measure("should run efficiently", func(b Benchmarker) {
        b.Time("runtime", func() {
            for i := 0; i < benchCount; i++ {
                resp = httptest.NewRecorder()
                req, _ = http.NewRequest("GET", "/", nil)
                server.ServeHTTP(resp, req)
                Expect(resp.Code).To(Equal(200))
                Expect(resp.Body.String()).To(Equal("TestValue: value"))
            }
        })
    }, 1)
})

var _ = Describe("ParserBenchChannel", func() {
    var server http.Handler
    var req *http.Request
    var resp *httptest.ResponseRecorder
    var api *Api

    BeforeSuite(func() {
        api = &Api{NewParserBenchChannel(OptValues{"test-value": "value"})}
        // And init the server
        server = api.NewServer()
    })

    BeforeEach(func() {
        // Record HTTP responses.
        resp = httptest.NewRecorder()
    })

    Describe("SetOpts", func() {
        Context("when setting new values in a go routine", func() {
            It("should NOT result in data race", func() {
                /*go func() {
                    api.Parser.SetOpts(OptValues{"test-value": "new"})
                }()*/
                req, _ = http.NewRequest("GET", "/", nil)
                server.ServeHTTP(resp, req)
                Expect(resp.Code).To(Equal(200))
                Expect(resp.Body.String()).To(Equal("TestValue: value"))
            })
        })
        Measure("should run efficiently", func(b Benchmarker) {
            b.Time("runtime", func() {
                for i := 0; i < benchCount; i++ {
                    resp = httptest.NewRecorder()
                    req, _ = http.NewRequest("GET", "/", nil)
                    server.ServeHTTP(resp, req)
                    Expect(resp.Code).To(Equal(200))
                    Expect(resp.Body.String()).To(Equal("TestValue: value"))
                }
            })
        }, 1)
    })
})