github.com/kaisenlinux/docker.io@v0.0.0-20230510090727-ea55db55fac7/engine/container/env_test.go (about)

     1  package container // import "github.com/docker/docker/container"
     2  
     3  import (
     4  	"crypto/rand"
     5  	"testing"
     6  
     7  	"gotest.tools/v3/assert"
     8  )
     9  
    10  func TestReplaceAndAppendEnvVars(t *testing.T) {
    11  	var (
    12  		d = []string{"HOME=/", "FOO=foo_default"}
    13  		// remove FOO from env
    14  		// remove BAR from env (nop)
    15  		o = []string{"HOME=/root", "TERM=xterm", "FOO", "BAR"}
    16  	)
    17  
    18  	env := ReplaceOrAppendEnvValues(d, o)
    19  	t.Logf("default=%v, override=%v, result=%v", d, o, env)
    20  	if len(env) != 2 {
    21  		t.Fatalf("expected len of 2 got %d", len(env))
    22  	}
    23  	if env[0] != "HOME=/root" {
    24  		t.Fatalf("expected HOME=/root got '%s'", env[0])
    25  	}
    26  	if env[1] != "TERM=xterm" {
    27  		t.Fatalf("expected TERM=xterm got '%s'", env[1])
    28  	}
    29  }
    30  
    31  func BenchmarkReplaceOrAppendEnvValues(b *testing.B) {
    32  	b.Run("0", func(b *testing.B) {
    33  		benchmarkReplaceOrAppendEnvValues(b, 0)
    34  	})
    35  	b.Run("100", func(b *testing.B) {
    36  		benchmarkReplaceOrAppendEnvValues(b, 100)
    37  	})
    38  	b.Run("1000", func(b *testing.B) {
    39  		benchmarkReplaceOrAppendEnvValues(b, 1000)
    40  	})
    41  	b.Run("10000", func(b *testing.B) {
    42  		benchmarkReplaceOrAppendEnvValues(b, 10000)
    43  	})
    44  }
    45  
    46  func benchmarkReplaceOrAppendEnvValues(b *testing.B, extraEnv int) {
    47  	b.StopTimer()
    48  	// remove FOO from env
    49  	// remove BAR from env (nop)
    50  	o := []string{"HOME=/root", "TERM=xterm", "FOO", "BAR"}
    51  
    52  	if extraEnv > 0 {
    53  		buf := make([]byte, 5)
    54  		for i := 0; i < extraEnv; i++ {
    55  			n, err := rand.Read(buf)
    56  			assert.NilError(b, err)
    57  			key := string(buf[:n])
    58  
    59  			n, err = rand.Read(buf)
    60  			assert.NilError(b, err)
    61  			val := string(buf[:n])
    62  
    63  			o = append(o, key+"="+val)
    64  		}
    65  	}
    66  	d := make([]string, 0, len(o)+2)
    67  	d = append(d, []string{"HOME=/", "FOO=foo_default"}...)
    68  
    69  	b.StartTimer()
    70  	for i := 0; i < b.N; i++ {
    71  		_ = ReplaceOrAppendEnvValues(d, o)
    72  	}
    73  }