diff options
author | Luke Shumaker <lukeshu@lukeshu.com> | 2017-09-08 21:53:43 -0400 |
---|---|---|
committer | Luke Shumaker <lukeshu@lukeshu.com> | 2017-09-08 22:00:01 -0400 |
commit | ee701cc53db14144df5321e5861e5bcbde220193 (patch) | |
tree | d9f9012fa7a1cb1175adf45bd9a65072a342e13a /nslcd_systemd/misc_test.go | |
parent | 5a7d3f0942dd7e661f63bb59be883e6e245c0ddd (diff) |
add a test for tricking the server into allocating huge buffers
Diffstat (limited to 'nslcd_systemd/misc_test.go')
-rw-r--r-- | nslcd_systemd/misc_test.go | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/nslcd_systemd/misc_test.go b/nslcd_systemd/misc_test.go index 8ef697a..0e6f2e9 100644 --- a/nslcd_systemd/misc_test.go +++ b/nslcd_systemd/misc_test.go @@ -283,3 +283,48 @@ func TestClientHang(t *testing.T) { }() } } + +func TestLargeRequest(t *testing.T) { + tmpdir, err := ioutil.TempDir("", "go-test-libnslcd-large-request.") + if err != nil { + t.Fatal(err) + } + defer os.RemoveAll(tmpdir) + defer sdActivatedReset() + t.Run("large-request", func(t *testing.T) { + testWithTimeout(t, 2*time.Second, func(t *testing.T, s chan<- string) { + GiB := 1024*1024*1024 + ctx := &testContext{T: t, tmpdir: tmpdir, status: s} + + backend := &LockingBackend{} + + limits := nslcd_server.Limits{ + Timeout: 1 * time.Second, + } + + notifyHandler := func(dat []byte, oob []byte) error { return nil } + + client := func(sockname string) { + errfatal := func(err error) { + if err != nil { + t.Fatal(err) + } + } + + conn, err := net.Dial("unix", sockname) + errfatal(err) + errfatal(nslcd_proto.Write(conn, nslcd_proto.NSLCD_VERSION)) + errfatal(nslcd_proto.Write(conn, nslcd_proto.NSLCD_ACTION_PASSWD_BYNAME)) + errfatal(nslcd_proto.Write(conn, int32(1*GiB))) + } + + testDriver(ctx, backend, limits, notifyHandler, client) + + var memstats runtime.MemStats + runtime.ReadMemStats(&memstats) + if memstats.HeapSys > uint64(1*GiB) { + t.Fatalf("Used more than 1 GiB heap: %s B", humanizeU64(memstats.HeapSys)) + } + }) + }) +} |