diff options
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)) + } + }) + }) +} |