github.com/webx-top/com@v1.2.12/cmd_test.go (about)

     1  package com
     2  
     3  import (
     4  	"bufio"
     5  	"context"
     6  	"io"
     7  	"os"
     8  	"sync"
     9  	"testing"
    10  
    11  	"github.com/stretchr/testify/assert"
    12  )
    13  
    14  func TestParseArgs(t *testing.T) {
    15  	parts := ParseArgs(`tower.exe -c tower.yaml -p "eee\"ddd" -t aaaa`)
    16  	expected := []string{"tower.exe", "-c", "tower.yaml", "-p", "eee\"ddd", "-t", "aaaa"}
    17  	assert.Equal(t, expected, parts)
    18  
    19  	parts = ParseArgs(`tower.exe -c    tower.yaml -p "eee\"ddd" -t aaaa`) // more space
    20  	assert.Equal(t, expected, parts)
    21  
    22  	parts = ParseArgs(`tower.exe -c=tower.yaml -p="eee\"ddd" -t=aaaa`)
    23  	assert.Equal(t, expected, parts)
    24  	parts = ParseArgs(`tower.exe -c=tower.yaml -p='eee"ddd' -t=aaaa`)
    25  	assert.Equal(t, expected, parts)
    26  
    27  	parts = ParseArgs(`tower.exe -c	  	tower.yaml 		-p 	"eee\"ddd" 	-t 	aaaa`) // space and tab
    28  	assert.Equal(t, expected, parts)
    29  
    30  	parts = ParseArgs(`tower.exe -c tower.yaml -p   'eee\'ddd' -t aaaa`)
    31  	assert.Equal(t, []string{"tower.exe", "-c", "tower.yaml", "-p", "eee'ddd", "-t", "aaaa"}, parts)
    32  	parts = ParseArgs(`tower.exe -c tower.yaml -p   '	eee\'ddd ' -t aaaa`)
    33  	assert.Equal(t, []string{"tower.exe", "-c", "tower.yaml", "-p", "	eee'ddd ", "-t", "aaaa"}, parts)
    34  }
    35  
    36  func TestParseFields(t *testing.T) {
    37  	parts := ParseFields(`drwxr-xr-x   1 root root    0 2023-11-19 04:18 'test test2'`)
    38  	expected := []string{"drwxr-xr-x", "1", "root", "root", "0", "2023-11-19", "04:18", "test test2"}
    39  	assert.Equal(t, expected, parts)
    40  }
    41  
    42  func TestParseEnvVar(t *testing.T) {
    43  	os.Setenv(`TESTENV`, `1`)
    44  	v := ParseEnvVar(`ab{$TESTENV}c`)
    45  	assert.Equal(t, `ab1c`, v)
    46  	v = ParseEnvVar(`ab{$NOTEXISTS:ok}c`)
    47  	assert.Equal(t, `abokc`, v)
    48  }
    49  
    50  func TestParseWindowsEnvVar(t *testing.T) {
    51  	os.Setenv(`TESTENV`, `2`)
    52  	v := ParseWindowsEnvVar(`ab{%TESTENV%}c`)
    53  	assert.Equal(t, `ab2c`, v)
    54  	v = ParseWindowsEnvVar(`ab{%NOTEXISTS:ok%}c`)
    55  	assert.Equal(t, `abokc`, v)
    56  }
    57  
    58  func TestCmdChanReader(t *testing.T) {
    59  	c := NewCmdChanReader()
    60  	ctx, cancel := context.WithCancel(context.Background())
    61  	defer func() {
    62  		cancel()
    63  		c.Close()
    64  	}()
    65  	wg := sync.WaitGroup{}
    66  	wg.Add(5)
    67  	go func() {
    68  		in := bufio.NewReader(c)
    69  		for {
    70  			select {
    71  			case <-ctx.Done():
    72  				return
    73  			default:
    74  				input, err := in.ReadString(LF)
    75  				if err != nil && err != io.EOF {
    76  					t.Log(err.Error())
    77  					return
    78  				}
    79  				wg.Done()
    80  				t.Log(input)
    81  			}
    82  		}
    83  	}()
    84  	c.SendStringAndWait("OK\n")
    85  	c.SendStringAndWait("OK1\n")
    86  	c.SendStringAndWait("OK2\n")
    87  	c.SendStringAndWait("OK3\n")
    88  	c.SendStringAndWait("OK4\n")
    89  	wg.Wait()
    90  }