대외활동/42서울

[42서울] minishell 테스트 케이스

Campus Coder 2024. 8. 11. 21:07
728x90
반응형

서론

끝내고 싶다.

 

테스트 케이스

leaks

minishell 프롬프트에 각종 명령이나 동작 사용하고 leaks minishell 으로 확인해보자.

  1. 공백 입력 릭
  2. cd 릭
  3. << (히어독) 내부 릭
  4. 자식 프로세스 릭

 

exit status

각종 명령이나 동작 사용하고 echo $? 로 exit status 확인해보자.

bash 출력값과 미니쉘 출력값이 다를 경우(특히 오류 메시지) 대부분 exit status가 잘못됐을 수 있다. exit status 값을 strerror 인자로 넘겨서 오류 메시지를 출력하는 것이 좋다.

  1. 파이프라인 뒤에 exit status
    1. 항상 0
    2. 예시(앞의 명령이 올바른 경우): ls | echo $?
    3. 예시(앞의 명령이 잘못된 경우): aaaaa | echo $?
  2. 시그널 처리 후 exit status 확인
    1. cntl + c, cntl + d, cntl + \
    2. cat 도중에도 시그널 보내보고 exit status 확인
  3. exit에 인자 넣어서 미니쉘 종료 시 인자로 넣은 숫자가 매우 크다면 numeric argument required 뜨면서 종료 + 종료코드 255

 

redirection

  1. 최대 히어독 개수는 16개, 넘어가면 오류
  2. 리다이렉션 위치 상관 없음 (맨 처음 또는 맨 뒤, 심지어 명령과 인자 사이에도 올 수 있으며 단독으로 나올 수도 있음)
    ls > test1 -a < test2 -l

 

export 및 env

  1. 인자 없이 export 사용 시 환경변수 내역이 잘 나와야 한다. 또한 내용은 알파벳 순서로 정렬되어 있다.
  2. export 명령에 잘못된 인자를 넣어서 실패했을 경우 env에는 쉘 변수가 추가되지 않는데 export 출력 결과에는 존재하는 경우도 있음.
  3. env 없을 때 세그폴트 날 수 있음 env -i ./minishell
  4. export TEST="ls -a -l" 이후 $TEST 입력하면 ls -a -l 명령어의 결과 나옴

 

env

env는 인자가 없는 빌트인 함수이므로 뒤에 명령어가 오면 무시됨

 

quote

  1. 명령어 중간에 quote 들어갈 수 있음. e''""c'h'"o" hi 이런 거 잘 작동함.
  2. 리다이렉션이나 파이프 앞뒤로 문자열 온 것도 파싱 가능 cat>test 또는 ls|expr $?

 

기타

  1. top 명령 이후 동작 안함. bash에서도 같은 문제가 있던데 구체적인 테스트 방법은 까먹음
  2. cat | cat | cat 이런 식으로 cat 여러번 열고 시그널 주기 (cntl + c,d,\)
  3. << a << b << c 이런 식으로 히어독 여러번 열고 시그널 주기
  4. cat | ls 결과 bash와 비교해보기
  5. $PATH를 ".:..", ".:..:bin"  이런식으로 설정하고 ls라는 이름의 실행 파일 만든 후 chmod로 권한 설정하면서 테스트 해보기
  6. 파이프 제대로 안닫아줘서 fd 많이 쓸 경우 pipe failed 에러 뜨고 종료되기도 했음 fd 개수 테스트 필요

+)

cd 실패 시 (디렉토리 삭제해서)
이런 것도 가능

 

후기

앞에 설명한 내용 말고도 미니쉘 예외 사항은 정말 끝도 없이 나온다. 상상치도 못한 것들이 많다. 예외 사항을 찾는다면 틈틈이 포스팅 업데이트 하겠다. 열심히 하자.

728x90
반응형