mirror of
				https://github.com/caddyserver/caddy.git
				synced 2025-10-30 10:12:45 -04:00 
			
		
		
		
	
		
			Some checks failed
		
		
	
	Tests / test (./cmd/caddy/caddy, ~1.24.1, ubuntu-latest, 0, 1.24, linux) (push) Failing after 1m49s
				
			Tests / test (s390x on IBM Z) (push) Has been skipped
				
			Tests / goreleaser-check (push) Has been skipped
				
			Cross-Build / build (~1.24.1, 1.24, aix) (push) Successful in 1m42s
				
			Cross-Build / build (~1.24.1, 1.24, darwin) (push) Successful in 1m42s
				
			Cross-Build / build (~1.24.1, 1.24, dragonfly) (push) Successful in 1m38s
				
			Cross-Build / build (~1.24.1, 1.24, freebsd) (push) Successful in 1m22s
				
			Cross-Build / build (~1.24.1, 1.24, illumos) (push) Successful in 1m19s
				
			Cross-Build / build (~1.24.1, 1.24, linux) (push) Successful in 1m32s
				
			Cross-Build / build (~1.24.1, 1.24, netbsd) (push) Successful in 1m28s
				
			Cross-Build / build (~1.24.1, 1.24, openbsd) (push) Successful in 1m32s
				
			Cross-Build / build (~1.24.1, 1.24, solaris) (push) Successful in 1m19s
				
			Cross-Build / build (~1.24.1, 1.24, windows) (push) Successful in 1m23s
				
			Lint / lint (ubuntu-latest, linux) (push) Successful in 2m2s
				
			Lint / govulncheck (push) Successful in 1m23s
				
			Tests / test (./cmd/caddy/caddy, ~1.24.1, macos-14, 0, 1.24, mac) (push) Has been cancelled
				
			Tests / test (./cmd/caddy/caddy.exe, ~1.24.1, windows-latest, True, 1.24, windows) (push) Has been cancelled
				
			Lint / lint (macos-14, mac) (push) Has been cancelled
				
			Lint / lint (windows-latest, windows) (push) Has been cancelled
				
			Co-authored-by: Matt Holt <mholt@users.noreply.github.com>
		
			
				
	
	
		
			85 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			85 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package reverseproxy
 | |
| 
 | |
| import (
 | |
| 	"io"
 | |
| 	"testing"
 | |
| )
 | |
| 
 | |
| type zeroReader struct{}
 | |
| 
 | |
| func (zeroReader) Read(p []byte) (int, error) {
 | |
| 	for i := range p {
 | |
| 		p[i] = 0
 | |
| 	}
 | |
| 	return len(p), nil
 | |
| }
 | |
| 
 | |
| func TestBuffering(t *testing.T) {
 | |
| 	var (
 | |
| 		h  Handler
 | |
| 		zr zeroReader
 | |
| 	)
 | |
| 	type args struct {
 | |
| 		body  io.ReadCloser
 | |
| 		limit int64
 | |
| 	}
 | |
| 	tests := []struct {
 | |
| 		name        string
 | |
| 		args        args
 | |
| 		resultCheck func(io.ReadCloser, int64, args) bool
 | |
| 	}{
 | |
| 		{
 | |
| 			name: "0 limit, body is returned as is",
 | |
| 			args: args{
 | |
| 				body:  io.NopCloser(&zr),
 | |
| 				limit: 0,
 | |
| 			},
 | |
| 			resultCheck: func(res io.ReadCloser, read int64, args args) bool {
 | |
| 				return res == args.body && read == args.limit && read == 0
 | |
| 			},
 | |
| 		},
 | |
| 		{
 | |
| 			name: "negative limit, body is read completely",
 | |
| 			args: args{
 | |
| 				body:  io.NopCloser(io.LimitReader(&zr, 100)),
 | |
| 				limit: -1,
 | |
| 			},
 | |
| 			resultCheck: func(res io.ReadCloser, read int64, args args) bool {
 | |
| 				brc, ok := res.(bodyReadCloser)
 | |
| 				return ok && brc.body == nil && brc.buf.Len() == 100 && read == 100
 | |
| 			},
 | |
| 		},
 | |
| 		{
 | |
| 			name: "positive limit, body is read partially",
 | |
| 			args: args{
 | |
| 				body:  io.NopCloser(io.LimitReader(&zr, 100)),
 | |
| 				limit: 50,
 | |
| 			},
 | |
| 			resultCheck: func(res io.ReadCloser, read int64, args args) bool {
 | |
| 				brc, ok := res.(bodyReadCloser)
 | |
| 				return ok && brc.body != nil && brc.buf.Len() == 50 && read == 50
 | |
| 			},
 | |
| 		},
 | |
| 		{
 | |
| 			name: "positive limit, body is read completely",
 | |
| 			args: args{
 | |
| 				body:  io.NopCloser(io.LimitReader(&zr, 100)),
 | |
| 				limit: 101,
 | |
| 			},
 | |
| 			resultCheck: func(res io.ReadCloser, read int64, args args) bool {
 | |
| 				brc, ok := res.(bodyReadCloser)
 | |
| 				return ok && brc.body == nil && brc.buf.Len() == 100 && read == 100
 | |
| 			},
 | |
| 		},
 | |
| 	}
 | |
| 	for _, tt := range tests {
 | |
| 		t.Run(tt.name, func(t *testing.T) {
 | |
| 			res, read := h.bufferedBody(tt.args.body, tt.args.limit)
 | |
| 			if !tt.resultCheck(res, read, tt.args) {
 | |
| 				t.Error("Handler.bufferedBody() test failed")
 | |
| 				return
 | |
| 			}
 | |
| 		})
 | |
| 	}
 | |
| }
 |