summaryrefslogtreecommitdiff
path: root/nslcd_systemd/misc_test.go
diff options
context:
space:
mode:
authorLuke Shumaker <lukeshu@lukeshu.com>2017-09-08 21:53:43 -0400
committerLuke Shumaker <lukeshu@lukeshu.com>2017-09-08 22:00:01 -0400
commitee701cc53db14144df5321e5861e5bcbde220193 (patch)
treed9f9012fa7a1cb1175adf45bd9a65072a342e13a /nslcd_systemd/misc_test.go
parent5a7d3f0942dd7e661f63bb59be883e6e245c0ddd (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.go45
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))
+ }
+ })
+ })
+}