テストツール goss導入・使用メモ

# Goss
## メモ・感想
とりあえずつかってみたメモ
複雑なテストは実施していないがLAMP構成等単純な構成や簡易な作りのサーバを立てた際のテストには非常に便利そう
autoaddやaddコマンドで簡単にテストが作れる
現在の設定を元にテストケースの生成をしてくれるので構築しつつテストケース作成が容易
ファイルの中に含まれる文字列の検索やコマンドの結果も取れるのでちゃんと作れば複雑なこともできそう 
exportを使用すれば一覧できるため内容確認が容易

## Gossとは
YAMLから読み込みの出来るserverspec的なテストツール
こちらの[リポジトリ](https://github.com/aelsabbahy/goss)を参照

## 今回の環境
- AmazonLinux
- テスト用にhttpdを導入

## 導入
```
# curl -fsSL https://goss.rocks/install | sh
Downloading https://github.com/aelsabbahy/goss/releases/download/v0.3.1/goss-linux-amd64
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   589    0   589    0     0    977      0 --:--:-- --:--:-- --:--:--   978
100 7791k  100 7791k    0     0   711k      0  0:00:10  0:00:10 --:--:-- 1256k
Goss v0.3.1 has been installed to /usr/local/bin/goss
goss --version
goss version v0.3.1
Downloading https://raw.githubusercontent.com/aelsabbahy/goss/master/extras/dgoss/dgoss
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  2241  100  2241    0     0   7892      0 --:--:-- --:--:-- --:--:--  7918
dgoss master has been installed to /usr/local/bin/dgoss

# goss --version (-vでも可)
goss version v0.3.1
```

## テストファイル作成
サンプルではsshdを使用しているが差分を見やすくするためにhttpdを使用

```
1. httpdが導入済み、停止中・自動起動なしの環境
# chkconfig httpd --list
httpd           0:off   1:off   2:off   3:off   4:off   5:off   6:off
# service httpd status
httpd is stopped

# goss autoadd httpd
Adding Package to './goss.yaml':

httpd:
  installed: true
  versions:
  - 2.2.31

Adding Service to './goss.yaml':

httpd:
  enabled: false
  running: false

2. httpdが導入済み、起動中・自動起動有りの環境
# chkconfig httpd --list
httpd           0:off   1:off   2:on    3:on    4:on    5:on    6:off
# service httpd status
httpd (pid  2836) is running...

# goss autoadd httpd
Adding Package to './goss.yaml':

httpd:
  installed: true
  versions:
  - 2.2.31

Adding Process to './goss.yaml':

httpd:
  running: true

Adding Port to './goss.yaml':

tcp6:80:
  listening: true
  ip:
  - '::'

Adding Service to './goss.yaml':

httpd:
  enabled: true
  running: true

```
上記のように現在の状態が追加される
autoaddを使用すれば自動的に指定したリソースに合わせて色々とテストケースを出力してくれる
簡易的なものに関しては `autoadd` や `add` を使用してテストケースを作れる
使用可能なリソースタイプは[ドキュメント](https://github.com/aelsabbahy/goss/blob/master/docs/manual.md#add-a---add-system-resource-to-test-suite)を参照
単一のテストケースを使用する場合は下記のように `add` を指定すれば良い
こちらも使用できるリソースタイプは決まっているので注意

```
# goss add service httpd
Adding Service to './goss.yaml':

httpd:
  enabled: false
  running: false

# goss add file /tmp/sample.txt
Adding File to './goss.yaml':

/tmp/sample.txt:
  exists: true
  mode: "0644"
  size: 0
  owner: root
  group: root
  filetype: file
  contains: []

# goss add command "ls /tmp"
Adding Command to './goss.yaml':

ls /tmp:
  exit-status: 0
  stdout:
  - sample.txt
  stderr: []
  timeout: 10000
```

## 使用例
```
# goss validate
....

Total Duration: 0.004s
Count: 4, Failed: 0, Skipped: 0

# goss -g ./goss-httpd.yaml validate
....

Total Duration: 0.036s
Count: 4, Failed: 0, Skipped: 0
```
ファイルの指定がない場合はデフォルトのgoss.yamlが読み込まれる
特定のファイルを使用したい場合は `-g/--gossfile`  でファイルを指定する