1
0
mirror of https://github.com/octoleo/hosts.git synced 2024-11-16 01:57:14 +00:00

Compare commits

..

No commits in common. "master" and "2.4.2" have entirely different histories.

27 changed files with 903 additions and 2732 deletions

2
.github/FUNDING.yml vendored
View File

@ -1,2 +0,0 @@
github: xwmx
custom: https://paypal.me/WilliamMelody

View File

@ -1,84 +0,0 @@
###############################################################################
# .github/workflows/tests.yml
#
# NOTE: GitHub Actions does not allocate a TTY, preventing detection of
# piped input using `[[ -t 0 ]]`.
#
# More information:
#
# https://github.com/actions/runner/issues/241
#
# faketty is a GitHub action that uses work-arounds to provide a tty:
#
# https://github.com/marketplace/actions/faketty
#
# Scripts used by faketty for each platform:
#
# linux: `faketty`
#
# ```bash
# #!/bin/bash
#
# script -q -e -c "$*"
# ```
#
# win32: `faketty.ps1`
#
# ```posh
# Invoke-Expression "$args"
# ```
#
# darwin: `faketty`
#
# requires: `brew install expect`
#
# ```bash
# #!/bin/bash
#
# unbuffer $*
# ```
###############################################################################
name: "hosts · Test Suite"
on:
pull_request:
branches: [ master ]
push:
branches: [ master ]
workflow_dispatch:
jobs:
test-macos-11:
name: "Test: macOS Big Sur 11.0"
runs-on: macos-11.0
steps:
- uses: actions/checkout@v3
- name: "Setup"
run: |
brew update
brew install bats-core
brew install expect
- name: "Set $TERM=xterm"
run: printf "TERM=xterm\\n" >> $GITHUB_ENV
- name: "Run bats tests"
run: unbuffer bats test
test-ubuntu-latest:
name: "Test: Ubuntu Latest"
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: "Setup"
run: |
sudo apt-get update
sudo apt-get install bats -y
- name: "Install bats-core"
run: |
git clone https://github.com/bats-core/bats-core.git "${HOME}/bats-core" &&
cd "${HOME}/bats-core"
git checkout 2e2e5df6adf0b846b411b6b2f7bb654cbc3e2c4e
sudo ./install.sh /usr/local
- name: "Set $TERM=xterm"
run: printf "TERM=xterm\\n" >> $GITHUB_ENV
- name: "Run bats tests"
run: script -q -e -c "bats test"

View File

@ -1,22 +0,0 @@
###############################################################################
# .shellcheckrc
#
# https://github.com/koalaman/shellcheck
# https://github.com/koalaman/shellcheck/wiki/Ignore
###############################################################################
# Disable SC2183
#
# Running into this: https://github.com/koalaman/shellcheck/issues/1310
# TODO: Check if resolved.
#
#https://github.com/koalaman/shellcheck/wiki/SC2183
disable=SC2183
# Disable SC2206 and SC2207
#
# `IFS` and `noglob` are set.
#
# https://github.com/koalaman/shellcheck/wiki/SC2206
# https://github.com/koalaman/shellcheck/wiki/SC2207
disable=SC2206,SC2207

View File

@ -3,8 +3,6 @@ PREFIX ?= /usr/local
install:
install $(BIN) $(PREFIX)/bin
./$(BIN) completions install
uninstall:
rm -f $(PREFIX)/bin/$(BIN)
./$(BIN) completions uninstall

496
README.md
View File

@ -1,5 +1,3 @@
[![Build Status](https://img.shields.io/github/actions/workflow/status/xwmx/hosts/tests.yml?branch=master)](https://github.com/xwmx/hosts/actions)
__ __
/ /_ ____ _____/ /______
/ __ \/ __ \/ ___/ __/ ___/
@ -8,15 +6,7 @@
# Hosts
`hosts` is a command line program for managing
[hosts file](https://en.wikipedia.org/wiki/Hosts_\(file\)) entries.
`hosts` works with existing hosts files and entries, making it easier to add,
remove, comment, and search hosts file entries using simple, memorable
commands.
`hosts` is designed to be lightweight, easy to use, and contained in a
single, portable script that can be `curl`ed into any environment.
A command line program for managing hosts file entries.
## Installation
@ -25,314 +15,34 @@ single, portable script that can be `curl`ed into any environment.
To install with [Homebrew](http://brew.sh/):
```bash
brew tap xwmx/taps
brew install hosts
```
### npm
To install with [npm](https://www.npmjs.com/package/hosts.sh):
```bash
npm install --global hosts.sh
brew tap alphabetum/taps && brew install alphabetum/taps/hosts
```
### bpkg
To install with [bpkg](https://github.com/bpkg/bpkg):
To install with [bpkg](http://www.bpkg.io/):
```bash
bpkg install xwmx/hosts
```
### Make
To install with [Make](https://en.wikipedia.org/wiki/Make_(software)),
clone this repository, navigate to the clone's root directory, and run:
```bash
sudo make install
bpkg install alphabetum/hosts
```
### Manual
To install as an administrator, copy and paste one of the following multi-line
commands:
To install manually, simply add the `hosts` script to your `$PATH`. If
you already have a `~/bin` directory, you can use the following command:
```bash
# install using wget
sudo wget https://raw.github.com/xwmx/hosts/master/hosts -O /usr/local/bin/hosts &&
sudo chmod +x /usr/local/bin/hosts &&
sudo hosts completions install
# install using curl
sudo curl -L https://raw.github.com/xwmx/hosts/master/hosts -o /usr/local/bin/hosts &&
sudo chmod +x /usr/local/bin/hosts &&
sudo hosts completions install
curl -L https://raw.github.com/alphabetum/hosts/master/hosts \
-o ~/bin/hosts && chmod +x ~/bin/hosts
```
###### User-only Installation
To install with just user permissions, simply add the `hosts` script to your
`$PATH`. If you already have a `~/bin` directory, for example, you can use
one of the following commands:
```bash
# download with wget
wget https://raw.github.com/xwmx/hosts/master/hosts -O ~/bin/hosts && chmod +x ~/bin/hosts
# download with curl
curl -L https://raw.github.com/xwmx/hosts/master/hosts -o ~/bin/hosts && chmod +x ~/bin/hosts
```
Installing with just user permissions doesn't install the completions, but
`hosts` works without them. If you have `sudo` access and want to install the
completion scripts, run the following command:
```bash
sudo hosts completions install
```
### Arch Linux
A package for Arch users is also
[available in the AUR](https://aur.archlinux.org/packages/hosts/).
### Tab Completion
Bash and Zsh tab completion is enabled when `hosts` is installed using
Homebrew, npm, bpkg, or Make. If you are installing `hosts` manually,
[completion can be enabled with a few commands](etc/README.md).
## Usage
### Listing Entries
`hosts` with no arguments lists the entries in the system's hosts file:
```bash
> hosts
127.0.0.1 localhost
255.255.255.255 broadcasthost
::1 localhost
fe80::1%lo0 localhost
```
`hosts` called with a string or regular expression will search for entries
that match.
```bash
> hosts localhost
127.0.0.1 localhost
::1 localhost
fe80::1%lo0 localhost
> hosts '\d\d\d'
127.0.0.1 localhost
255.255.255.255 broadcasthost
```
### Adding Entries
To add an entry, use `hosts add`:
```bash
> hosts add 127.0.0.1 example.com
Added:
127.0.0.1 example.com
```
Run `hosts` or `hosts list` to see the new entry in the list:
```bash
> hosts
127.0.0.1 localhost
255.255.255.255 broadcasthost
::1 localhost
fe80::1%lo0 localhost
127.0.0.1 example.com
```
### Removing Entries
To remove an entry, use `hosts remove`, which can take an IP
address, domain, or regular expression:
```bash
> hosts remove example.com
Removing the following entries:
127.0.0.1 example.com
Are you sure you want to proceed? [y/N] y
Removed:
127.0.0.1 example.com
```
### Blocking and Unblocking Domains
`hosts` provides easy commands for blocking and unblocking domains with IPv4
and IPv6 entries:
```bash
> hosts block example.com
Added:
127.0.0.1 example.com
Added:
fe80::1%lo0 example.com
Added:
::1 example.com
> hosts unblock example.com
Removed:
127.0.0.1 example.com
Removed:
fe80::1%lo0 example.com
Removed:
::1 example.com
```
### Enabling / Disabling Entries
All entries are enabled by default. Disabiling an entry comments it out
so it has no effect, but remains in the hosts file ready to be enabled
again.
```bash
> hosts
127.0.0.1 localhost
255.255.255.255 broadcasthost
::1 localhost
fe80::1%lo0 localhost
127.0.0.1 example.com
> hosts disable example.com
Disabling:
127.0.0.1 example.com
> hosts
127.0.0.1 localhost
255.255.255.255 broadcasthost
::1 localhost
fe80::1%lo0 localhost
Disabled:
---------
127.0.0.1 example.com
> hosts enable example.com
Enabling:
127.0.0.1 example.com
> hosts
127.0.0.1 localhost
255.255.255.255 broadcasthost
::1 localhost
fe80::1%lo0 localhost
127.0.0.1 example.com
```
### Backups
Create backups of your hosts file with `hosts backups create`:
```bash
> hosts backups create
Backed up to /etc/hosts--backup-20200101000000
```
List your backups with `hosts backups`. If you have existing hosts file
backups, `hosts` will include them:
```bash
> hosts backups
hosts--backup-20200101000000
hosts.bak
```
`hosts backups compare` will open your hosts file with `diff`:
```bash
> hosts backups compare hosts--backup-20200101000000
--- /etc/hosts 2020-01-01 00:00:00.000000000
+++ /etc/hosts--backup-20200101000000 2020-01-01 00:00:00.000000000
@@ -8,3 +8,4 @@
255.255.255.255 broadcasthost
::1 localhost
fe80::1%lo0 localhost
+127.0.0.1 example.com
```
View a backup with `hosts backups show`:
```bash
> hosts backups show hosts--backup-20200101000000
##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting. Do not change this entry.
##
127.0.0.1 localhost
255.255.255.255 broadcasthost
::1 localhost
fe80::1%lo0 localhost
127.0.0.1 example.com
```
Restore a backup with `hosts backups restore`. Before a backup is
restored, a new one is created to avoid data loss:
```bash
> hosts backups restore hosts--backup-20200101000000
Backed up to /etc/hosts--backup-20200102000001
Restored from backup: hosts--backup-20200101000000
```
### Viewing and Editing `/etc/hosts` Directly
`hosts file` prints the raw contents of `/etc/hosts`:
```bash
> hosts file
##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting. Do not change this entry.
##
127.0.0.1 localhost
255.255.255.255 broadcasthost
::1 localhost
fe80::1%lo0 localhost
```
`hosts edit` opens `/etc/hosts` in your editor:
```bash
> hosts edit
```
### `--auto-sudo`
When the `--auto-sudo` flag is used, all write operations that require
`sudo` will automatically rerun the command using `sudo` when the current user
does not have write permissions for the hosts file.
To have this option always enabled, add the following line to your shell
configuration (`.bashrc`, `.zshrc`, or similar):
```bash
alias hosts="hosts --auto-sudo"
```
## Help
```text
Usage:
hosts [<search string>]
hosts add <ip> <hostname> [<comment>]
hosts backups [create | (compare | delete | restore | show) <filename>]
hosts block <hostname>...
hosts completions (check | install [-d | --download] | uninstall)
hosts block <hostname>
hosts disable (<ip> | <hostname> | <search string>)
hosts disabled
hosts edit
@ -342,9 +52,8 @@ Usage:
hosts list [enabled | disabled | <search string>]
hosts search <search string>
hosts show (<ip> | <hostname> | <search string>)
hosts subcommands [--raw]
hosts remove (<ip> | <hostname> | <search string>) [--force]
hosts unblock <hostname>...
hosts unblock <hostname>
hosts --auto-sudo
hosts -h | --help
hosts --version
@ -370,29 +79,7 @@ For help with a particular command, try:
hosts help <command name>
```
## Subcommands
<p align="center">
<a href="#hosts-1">(default)</a>
<a href="#hosts-add">add</a>
<a href="#hosts-backups">backups</a>
<a href="#hosts-block">block</a>
<a href="#hosts-completions">completions</a>
<a href="#hosts-disable">disable</a>
<a href="#hosts-disabled">disabled</a>
<a href="#hosts-edit">edit</a>
<a href="#hosts-enable">enable</a>
<a href="#hosts-enabled">enabled</a>
<a href="#hosts-file">file</a>
<a href="#hosts-help">help</a>
<a href="#hosts-list">list</a>
<a href="#hosts-remove">remove</a>
<a href="#hosts-search">search</a>
<a href="#hosts-show">show</a>
<a href="#hosts-subcommands">subcommands</a>
<a href="#hosts-unblock">unblock</a>
<a href="#hosts-version">version</a>
</p>
## Commands
### `hosts`
@ -402,7 +89,7 @@ Usage:
Description:
List the existing IP / hostname pairs, optionally limited to a specified
state. When provided with a seach string, all matching enabled entries will
state. When provided with a seach string, all matching enabled records will
be printed.
Alias for `hosts list`
@ -416,55 +103,17 @@ Usage:
Description:
Add a given IP address and hostname pair, along with an optional comment.
Exit status:
0 Entry successfully added.
1 Invalid parameters or entry exists.
```
### `hosts backups`
```text
Usage:
hosts backups
hosts backups create
hosts backups compare <filename>
hosts backups delete <filename>
hosts backups restore <filename> [--skip-backup]
hosts backups show <filename>
Subcommands:
backups List available backups.
backups create Create a new backup of the hosts file.
backups compare Compare a backup file with the current hosts file.
backups delete Delete the specified backup.
backups restore Replace the contents of the hosts file with a
specified backup. The hosts file is automatically
backed up before being overwritten unless the
'--skip-backup' flag is specified.
backups show Show the contents of the specified backup file.
Description:
Manage backups.
Exit status:
0 Success.
1 Invalid parameters or backup not found.
```
### `hosts block`
```text
Usage:
hosts block <hostname>...
hosts block <hostname>
Description:
Block one or more hostnames by adding new entries assigned to `127.0.0.1`
Block a given hostname by adding new entries assigning it to `127.0.0.1`
for IPv4 and both `fe80::1%lo0` and `::1` for IPv6.
Exit status:
0 <hostname> successfully blocked.
1 Invalid parameters or entry exists.
```
#### Blocklists
@ -472,22 +121,17 @@ Exit status:
- [jmdugan/blocklists](https://github.com/jmdugan/blocklists)
- [notracking/hosts-blocklists](https://github.com/notracking/hosts-blocklists)
### `hosts completions`
### `hosts commands`
```text
Usage:
hosts completions (check | install [-d | --download] | uninstall)
hosts commands [--raw]
Options:
-d, --download Download the completion scripts and install.
--raw Display the command list without formatting.
Description:
Manage completion scripts. For more information, visit:
https://github.com/xwmx/hosts/blob/master/etc/README.md
Exit status:
0 Completions successfully installed.
1 Invalid parameters or other error.
Display the list of available commands.
```
### `hosts disable`
@ -497,12 +141,8 @@ Usage:
hosts disable (<ip> | <hostname> | <search string>)
Description:
Disable one or more entries based on a given ip address, hostname, or
Disable one or more records based on a given ip address, hostname, or
search string.
Exit status:
0 Entry successfully disabled.
1 Invalid parameters or entry not found.
```
### `hosts disabled`
@ -512,11 +152,7 @@ Usage:
hosts disabled
Description:
List all disabled entries. This is an alias for `hosts list disabled`.
Exit status:
0 One or more disabled entries found.
1 Invalid parameters or no disabled entries found.
List all disabled records. This is an alias for `hosts list disabled`.
```
### `hosts edit`
@ -536,12 +172,8 @@ Usage:
hosts enable (<ip> | <hostname> | <search string>)
Description:
Enable one or more disabled entries based on a given ip address, hostname,
Enable one or more disabled records based on a given ip address, hostname,
or search string.
Exit status:
0 Entry successfully enabled.
1 Invalid parameters or entry not found.
```
### `hosts enabled`
@ -551,11 +183,7 @@ Usage:
hosts enabled
Description:
List all enabled entries. This is an alias for `hosts list enabled`.
Exit status:
0 One or more enabled entries found.
1 Invalid parameters or no enabled entries found.
List all enabled records. This is an alias for `hosts list enabled`.
```
### `hosts file`
@ -586,12 +214,8 @@ Usage:
Description:
List the existing IP / hostname pairs, optionally limited to a specified
state. When provided with a seach string, all matching enabled entries will
state. When provided with a seach string, all matching enabled records will
be printed.
Exit status:
0 One or more matching entries found.
1 Invalid parameters or entry not found.
```
### `hosts remove`
@ -605,13 +229,9 @@ Options:
--force Skip the confirmation prompt.
Description:
Remove one or more entries based on a given IP address, hostname, or search
string. If an IP and hostname are both provided, only entries matching the
Remove one or more records based on a given IP address, hostname, or search
string. If an IP and hostname are both provided, only records matching the
IP and hostname pair will be removed.
Exit status:
0 Entry successfully removed.
1 Invalid parameters or entry not found.
```
### `hosts search`
@ -622,10 +242,6 @@ Usage:
Description:
Search entries for <search string>.
Exit status:
0 One or more matching entries found.
1 Invalid parameters or entry not found.
```
### `hosts show`
@ -636,37 +252,16 @@ Usage:
Description:
Print entries matching a given IP address, hostname, or search string.
Exit status:
0 One or more matching entries found.
1 Invalid parameters or entry not found.
```
### `hosts subcommands`
```text
Usage:
hosts subcommands [--raw]
Options:
--raw Display the subcommands list without formatting.
Description:
Display the list of available subcommands.
```
### `hosts unblock`
```text
Usage:
hosts unblock <hostname>...
hosts unblock <hostname>
Description:
Unblock one or more hostnames by removing the entries from the hosts file.
Exit status:
0 <hostname> successfully unblocked.
1 Invalid parameters or entry not found
Unblock a given hostname by removing its entries from the hosts file.
```
### `hosts version`
@ -679,16 +274,37 @@ Description:
Display the current program version.
```
## Options
### `--auto-sudo`
When specified, all write operations that require `sudo` will automatically
rerun the command using `sudo` when the current user does not have write
permissions for the hosts file.
To have this option always enabled, add the following line to your shell
configuration (`.bashrc`, `.zshrc`, or similar):
```bash
alias hosts="hosts --auto-sudo"
```
### `-h` `--help`
Display help information.
### `--version`
Display version information.
## Tests
To run the [test suite](test), install [Bats](https://github.com/sstephenson/bats) and
To run the test suite, install [Bats](https://github.com/sstephenson/bats) and
run `bats test` in the project root directory.
---
<p align="center">
Copyright (c) 2015-present William Melody • See LICENSE for details.
</p>
## Acknowledgements
- https://gist.github.com/nddrylliog/1368532
- https://gist.github.com/dfeyer/1369760
- https://github.com/macmade/host-manager
<p align="center">
<a href="https://github.com/xwmx/hosts">github.com/xwmx/hosts</a>
</p>

View File

@ -1,113 +0,0 @@
# `hosts` Tab Completion
## Homebrew
Installing via Homebrew with `brew install xwmx/taps/hosts` will also
install the completion scripts.
A one-time setup might be needed to [enable completion for all Homebrew
programs](https://docs.brew.sh/Shell-Completion).
## npm, bpkg, Make
When `hosts` is installed with `npm`, `bpkg`, or Make, an install hook will
check the environment and attempt to install completions. If it's successful,
you should see a message similar to:
```bash
Completion installed: /usr/local/etc/bash_completion.d/hosts
Completion installed: /usr/local/share/zsh/site-functions/_hosts
```
If completion is working after installing through any of these methods, then
you don't need to do anything else.
## `hosts completions`
The `hosts completions` subcommand can be used for installing and uninstalling
completion scripts. Depending on your configuration, you might need to use
`sudo` to install completion scripts easily:
```bash
> sudo hosts completions check
Completion scripts not found.
> sudo hosts completions install
Completion script installed: /usr/share/bash-completion/completions/hosts
Completion script installed: /usr/local/share/zsh/site-functions/_hosts
> sudo hosts completions check
Exists: /usr/share/bash-completion/completions/hosts
Exists: /usr/local/share/zsh/site-functions/_hosts
> sudo hosts completions uninstall
Completion script removed: /usr/share/bash-completion/completions/hosts
Completion script removed: /usr/local/share/zsh/site-functions/_hosts
```
If you installed `hosts` manually by downloading just the `hosts` script,
the completion scripts won't be immediately available for
`hosts completions install`. You can try installing the completions with
the `--download` flag, which will get the latest version from GitHub:
```bash
sudo hosts completions install --download
```
`hosts completions` will try to determine the completion script directories
from your environment. If `hosts completions` isn't able to install
the completion scripts, you can try installing them manually.
## Manual Installation
### bash
#### Linux
On a current Linux OS (in a non-minimal installation), bash completion should
be available.
Place the completion script in `/etc/bash_completion.d/`:
```bash
sudo curl -L https://raw.githubusercontent.com/xwmx/hosts/master/hosts-completion.bash -o /etc/bash_completion.d/hosts
```
#### macOS
If you aren't installing with homebrew, source the completion script in
`.bash_profile`:
```sh
if [[ -f /path/to/hosts-completion.bash ]]
then
source /path/to/hosts-completion.bash
fi
```
### zsh
Place the completion script in your `/path/to/zsh/completion` (typically
`~/.zsh/completion/`):
```bash
$ mkdir -p ~/.zsh/completion
$ curl -L https://raw.githubusercontent.com/xwmx/hosts/master/hosts-completion.zsh > ~/.zsh/completion/_hosts
```
Include the directory in your `$fpath` by adding in `~/.zshrc`:
```bash
fpath=(~/.zsh/completion $fpath)
```
Make sure `compinit` is loaded or do it by adding in `~/.zshrc`:
```bash
autoload -Uz compinit && compinit -i
```
Then reload your shell:
```bash
exec $SHELL -l
```

1932
hosts

File diff suppressed because it is too large Load Diff

View File

@ -1,5 +1,3 @@
#compdef hosts
__hosts_subcommands() {
local _commands
_commands=($(hosts commands --raw))
@ -23,4 +21,4 @@ __hosts_subcommands() {
fi
}
__hosts_subcommands "$@"
compdef __hosts_subcommands hosts

5
package-lock.json generated
View File

@ -1,5 +0,0 @@
{
"name": "hosts.sh",
"version": "3.6.4",
"lockfileVersion": 1
}

View File

@ -1,38 +1,7 @@
{
"name": "hosts.sh",
"version": "3.6.4",
"name": "hosts",
"version": "2.4.2",
"description": "A command line tool for managing hosts file entries.",
"global": true,
"install": "make install",
"bin": {
"hosts": "./hosts"
},
"directories": {
"test": "test"
},
"scripts": {
"test": "bats test",
"postinstall": "./hosts completions install",
"preuninstall": "./hosts completions uninstall"
},
"repository": {
"type": "git",
"url": "git+https://github.com/xwmx/hosts.git"
},
"author": "William Melody",
"license": "MIT",
"bugs": {
"url": "https://github.com/xwmx/hosts/issues"
},
"homepage": "https://github.com/xwmx/hosts#readme",
"keywords": [
"hosts",
"shell",
"command-line",
"terminal",
"hostname",
"bash",
"cli"
],
"dependencies": {}
"install": "make install"
}

View File

@ -84,27 +84,10 @@ load test_helper
[[ "${lines[1]}" == "0.0.0.0 example.com" ]]
}
@test "\`add <ip> <hostname>\` doesn't add duplicate entry." {
_original="$(cat "${HOSTS_PATH}")"
{
run "${_HOSTS}" add 0.0.0.0 example.com
}
_modified="$(cat "${HOSTS_PATH}")"
run "${_HOSTS}" add 0.0.0.0 example.com
printf "\${status}: %s\\n" "${status}"
printf "\${output}: '%s'\\n" "${output}"
_compare "${_original}" "$(cat "${HOSTS_PATH}")"
_compare '0.0.0.0 example.com' "$(sed -n '11p' "${HOSTS_PATH}")"
[[ "$(cat "${HOSTS_PATH}")" != "${_original}" ]]
[[ "$(cat "${HOSTS_PATH}")" == "${_modified}" ]]
[[ "$(sed -n '11p' "${HOSTS_PATH}")" == "0.0.0.0 example.com" ]]
}
# `hosts add <ip> <hostname> [comment]` #######################################
@test "\`add <ip> <hostname> [comment]\` exits with status 0." {
run "${_HOSTS}" add 0.0.0.0 example.com 'Example multi-word comment.'
run "${_HOSTS}" add 0.0.0.0 example.com 'Comment.'
printf "\${status}: %s\\n" "${status}"
printf "\${output}: '%s'\\n" "${output}"
[[ ${status} -eq 0 ]]
@ -113,57 +96,19 @@ load test_helper
@test "\`add <ip> <hostname> [comment]\` adds the entry to the hosts file." {
_original="$(cat "${HOSTS_PATH}")"
run "${_HOSTS}" add 0.0.0.0 example.com 'Example multi-word comment.'
run "${_HOSTS}" add 0.0.0.0 example.com 'Comment.'
printf "\${status}: %s\\n" "${status}"
printf "\${output}: '%s'\\n" "${output}"
[[ "$(cat "${HOSTS_PATH}")" != "${_original}" ]]
[[ "$(sed -n '11p' "${HOSTS_PATH}")" == \
"0.0.0.0 example.com # Example multi-word comment." ]]
}
@test "\`add <ip> <hostname> [comment]\` doesn't add duplicate entry." {
_original="$(cat "${HOSTS_PATH}")"
{
run "${_HOSTS}" add 0.0.0.0 example.com
}
_modified="$(cat "${HOSTS_PATH}")"
run "${_HOSTS}" add 0.0.0.0 example.com 'Example multi-word comment.'
printf "\${status}: %s\\n" "${status}"
printf "\${output}: '%s'\\n" "${output}"
_compare "${_original}" "$(cat "${HOSTS_PATH}")"
_compare '0.0.0.0 example.com' "$(sed -n '11p' "${HOSTS_PATH}")"
[[ "$(cat "${HOSTS_PATH}")" != "${_original}" ]]
[[ "$(cat "${HOSTS_PATH}")" == "${_modified}" ]]
[[ "$(sed -n '11p' "${HOSTS_PATH}")" == "0.0.0.0 example.com" ]]
[[ "$(sed -n '11p' "${HOSTS_PATH}")" != \
"0.0.0.0 example.com # Example multi-word comment." ]]
}
@test "\`add <ip> <hostname> [comment]\` doesn't add duplicate commented entry." {
_original="$(cat "${HOSTS_PATH}")"
{
run "${_HOSTS}" add 0.0.0.0 example.com 'Example multi-word comment.'
}
_modified="$(cat "${HOSTS_PATH}")"
run "${_HOSTS}" add 0.0.0.0 example.com 'Example multi-word comment.'
printf "\${status}: %s\\n" "${status}"
printf "\${output}: '%s'\\n" "${output}"
_compare "${_original}" "$(cat "${HOSTS_PATH}")"
_compare '0.0.0.0 example.com' "$(sed -n '11p' "${HOSTS_PATH}")"
[[ "$(cat "${HOSTS_PATH}")" != "${_original}" ]]
[[ "$(cat "${HOSTS_PATH}")" == "${_modified}" ]]
[[ "$(sed -n '11p' "${HOSTS_PATH}")" == \
"0.0.0.0 example.com # Example multi-word comment." ]]
[[ "$(sed -n '11p' "${HOSTS_PATH}")" == "0.0.0.0 example.com # Comment." ]]
}
@test "\`add <ip> <hostname> [comment]\` prints feedback." {
run "${_HOSTS}" add 0.0.0.0 example.com 'Example multi-word comment.'
run "${_HOSTS}" add 0.0.0.0 example.com 'Comment.'
printf "\${status}: %s\\n" "${status}"
printf "\${output}: '%s'\\n" "${output}"
[[ "${lines[0]}" == "Added:" ]]
[[ "${lines[1]}" == "0.0.0.0 example.com # Example multi-word comment." ]]
[[ "${lines[1]}" == "0.0.0.0 example.com # Comment." ]]
}
# help ########################################################################

View File

@ -1,257 +0,0 @@
#!/usr/bin/env bats
load test_helper
# `hosts backups` #############################################################
@test "\`backups\` with no backups and no arguments exits with status 0." {
run "${_HOSTS}" backups
printf "\${status}: %s\\n" "${status}"
printf "\${output}: '%s'\\n" "${output}"
[[ ${status} -eq 0 ]]
}
@test "\`backups\` with backups and no arguments exits with status 0." {
{
run "${_HOSTS}" backups create
}
run "${_HOSTS}" backups
printf "\${status}: %s\\n" "${status}"
printf "\${output}: '%s'\\n" "${output}"
[[ ${status} -eq 0 ]]
}
@test "\`backups\` with no backups and no arguments prints message." {
run "${_HOSTS}" backups
printf "\${status}: %s\\n" "${status}"
printf "\${output}: '%s'\\n" "${output}"
printf "\${_HOSTS_TEMP_PATH}: '%s'\\n" "${_HOSTS_TEMP_PATH}"
printf "\${HOSTS_PATH}: '%s'\\n" "${HOSTS_PATH}"
_expected="\
No backups found. Create a new backup:
hosts backups create"
[[ "${output}" == "${_expected}" ]]
}
@test "\`backups\` with backups and no arguments prints list of backups." {
{
run "${_HOSTS}" backups create
sleep 1
run "${_HOSTS}" backups create
}
run "${_HOSTS}" backups
printf "\${status}: %s\\n" "${status}"
printf "\${output}: '%s'\\n" "${output}"
printf "\${_HOSTS_TEMP_PATH}: '%s'\\n" "${_HOSTS_TEMP_PATH}"
printf "\${HOSTS_PATH}: '%s'\\n" "${HOSTS_PATH}"
[[ "${lines[0]}" =~ hosts--backup- ]]
[[ "${lines[1]}" =~ hosts--backup- ]]
}
# `hosts backups create` ######################################################
@test "\`backups create\` exits with status 0." {
run "${_HOSTS}" backups create
printf "\${status}: %s\\n" "${status}"
printf "\${output}: '%s'\\n" "${output}"
[[ ${status} -eq 0 ]]
}
@test "\`backups create\` creates backup." {
run "${_HOSTS}" backups create
printf "\${status}: %s\\n" "${status}"
printf "\${output}: '%s'\\n" "${output}"
_backup_path="$(echo "${output}" | sed -e 's/Backed up to \(.*\)/\1/')"
printf "\${_backup_path}: '%s'\\n" "${_backup_path}"
[[ -e "${_backup_path}" ]]
}
@test "\`backups create\` prints message." {
run "${_HOSTS}" backups create
printf "\${status}: %s\\n" "${status}"
printf "\${output}: '%s'\\n" "${output}"
[[ ${output} =~ 'Backed up to' ]]
}
# `hosts backups compare` #####################################################
@test "\`backups compare\` with valid backup exits with status 1 and prints." {
{
run "${_HOSTS}" backups create
_backup_path="$(echo "${output}" | sed -e 's/Backed up to \(.*\)/\1/')"
_backup_basename="$(basename "${_backup_path}")"
run "${_HOSTS}" add 0.0.0.0 example.com
}
run "${_HOSTS}" backups compare "${_backup_basename}"
printf "\${output}: '%s'\\n" "${output}"
printf "\${lines[1]}: '%s'\\n" "${lines[1]}"
[[ ${status} -eq 1 ]]
[[ "${lines[2]}" == '@@ -8,4 +8,3 @@' ]]
}
@test "\`backups compare\` with missing backup exits with status 1" {
{
run "${_HOSTS}" backups create
_backup_path="$(echo "${output}" | sed -e 's/Backed up to \(.*\)/\1/')"
_backup_basename="$(basename "${_backup_path}")"
run "${_HOSTS}" add 0.0.0.0 example.com
}
run "${_HOSTS}" backups compare
printf "\${status}: %s\\n" "${status}"
printf "\${output}: '%s'\\n" "${output}"
[[ ${status} -eq 1 ]]
[[ "${lines[0]}" =~ 'Usage' ]]
}
@test "\`backups compare\` with invalid backup exits with status 1" {
{
run "${_HOSTS}" backups create
_backup_path="$(echo "${output}" | sed -e 's/Backed up to \(.*\)/\1/')"
_backup_basename="$(basename "${_backup_path}")"
run "${_HOSTS}" add 0.0.0.0 example.com
}
run "${_HOSTS}" backups compare "invalid-backup-name"
printf "\${status}: %s\\n" "${status}"
printf "\${output}: '%s'\\n" "${output}"
[[ ${status} -eq 1 ]]
[[ ${output} =~ 'Backup not found' ]]
}
# `hosts backups delete` ######################################################
@test "\`backups delete\` with valid backup exits with status 0 and deletes backup" {
{
run "${_HOSTS}" backups create
_backup_path="$(echo "${output}" | sed -e 's/Backed up to \(.*\)/\1/')"
[[ -e "${_backup_path}" ]]
_backup_basename="$(basename "${_backup_path}")"
}
run "${_HOSTS}" backups delete "${_backup_basename}"
printf "\${status}: %s\\n" "${status}"
printf "\${output}: '%s'\\n" "${output}"
[[ ${status} -eq 0 ]]
[[ ! -e "${_backup_path}" ]]
[[ ${output} =~ 'Backup deleted' ]]
}
@test "\`backups delete\` with invalid backup exits with status 1" {
{
run "${_HOSTS}" backups create
_backup_path="$(echo "${output}" | sed -e 's/Backed up to \(.*\)/\1/')"
_backup_basename="$(basename "${_backup_path}")"
}
run "${_HOSTS}" backups delete "invalid-backup-name"
printf "\${status}: %s\\n" "${status}"
printf "\${output}: '%s'\\n" "${output}"
[[ ${status} -eq 1 ]]
[[ -e "${_backup_path}" ]]
[[ ${output} =~ 'Backup not found' ]]
}
# `hosts backups restore` #####################################################
@test "\`backups restore\` with valid backup exits with status 0 and restores" {
{
run "${_HOSTS}" backups create
_backup_path="$(echo "${output}" | sed -e 's/Backed up to \(.*\)/\1/')"
_backup_basename="$(basename "${_backup_path}")"
run "${_HOSTS}" add 0.0.0.0 example.com
sleep 1
}
run "${_HOSTS}" backups restore "${_backup_basename}"
printf "\${status}: %s\\n" "${status}"
printf "\${output}: '%s'\\n" "${output}"
printf "\${lines[0]}: '%s'\\n" "${lines[0]}"
[[ ${status} -eq 0 ]]
[[ "${lines[0]}" =~ 'Backed up to' ]]
[[ "${lines[1]}" =~ 'Restored from backup' ]]
_new_backup_path="$(echo "${lines[0]}" | sed -e 's/Backed up to \(.*\)/\1/')"
printf "\${_backup_path}: '%s'\\n" "${_backup_path}"
printf "\${_new_backup_path}: '%s'\\n" "${_new_backup_path}"
_new_backup_content="$(cat "${_new_backup_path}")"
_old_backup_content="$(cat "${_backup_path}")"
_current_content="$(cat "${HOSTS_PATH}")"
[[ "${_new_backup_content}" != "${_current_content}" ]]
[[ "${_old_backup_content}" == "${_current_content}" ]]
}
@test "\`backups restore --skip-backup\` with valid backup exits with status 0 and restores" {
{
run "${_HOSTS}" backups create
_backup_path="$(echo "${output}" | sed -e 's/Backed up to \(.*\)/\1/')"
_backup_basename="$(basename "${_backup_path}")"
run "${_HOSTS}" add 0.0.0.0 example.com
_replaced_content="$(cat "${HOSTS_PATH}")"
sleep 1
}
run "${_HOSTS}" backups restore "${_backup_basename}" --skip-backup
printf "\${status}: %s\\n" "${status}"
printf "\${output}: '%s'\\n" "${output}"
printf "\${lines[0]}: '%s'\\n" "${lines[0]}"
[[ ${status} -eq 0 ]]
[[ "${lines[0]}" =~ 'Restored from backup' ]]
_old_backup_content="$(cat "${_backup_path}")"
_current_content="$(cat "${HOSTS_PATH}")"
[[ "${_replaced_content}" != "${_current_content}" ]]
[[ "${_old_backup_content}" == "${_current_content}" ]]
}
@test "\`backups restore\` with invalid backup exits with status 1" {
{
run "${_HOSTS}" backups create
_backup_path="$(echo "${output}" | sed -e 's/Backed up to \(.*\)/\1/')"
_backup_basename="$(basename "${_backup_path}")"
}
run "${_HOSTS}" backups restore "invalid-backup-name"
printf "\${status}: %s\\n" "${status}"
printf "\${output}: '%s'\\n" "${output}"
[[ ${status} -eq 1 ]]
[[ ${output} =~ 'Backup not found' ]]
}
# `hosts backups show` ########################################################
@test "\`backups show\` with valid backup exits with status 0 and prints." {
{
run "${_HOSTS}" backups create
_backup_path="$(echo "${output}" | sed -e 's/Backed up to \(.*\)/\1/')"
[[ -e "${_backup_path:-}" ]]
_backup_basename="$(basename "${_backup_path}")"
}
run "${_HOSTS}" backups show "${_backup_basename}"
printf "\${output}: '%s'\\n" "${output}"
printf "\${lines[6]}: '%s'\\n" "${lines[6]}"
[[ ${status} -eq 0 ]]
[[ "${lines[6]}" == '127.0.0.1 localhost' ]]
}
@test "\`backups show\` with invalid backup exits with status 1" {
{
run "${_HOSTS}" backups create
_backup_path="$(echo "${output}" | sed -e 's/Backed up to \(.*\)/\1/')"
_backup_basename="$(basename "${_backup_path}")"
}
run "${_HOSTS}" backups show "invalid-backup-name"
printf "\${status}: %s\\n" "${status}"
printf "\${output}: '%s'\\n" "${output}"
[[ ${status} -eq 1 ]]
[[ ${output} =~ 'Backup not found' ]]
}

View File

@ -2,7 +2,7 @@
load test_helper
# `hosts block` ###############################################################
# `hosts block` #################################################################
@test "\`block\` with no arguments exits with status 1." {
run "${_HOSTS}" block
@ -25,10 +25,10 @@ load test_helper
printf "\${status}: %s\\n" "${status}"
printf "\${output}: '%s'\\n" "${output}"
[[ "${lines[0]}" == "Usage:" ]]
[[ "${lines[1]}" == " hosts block <hostname>..." ]]
[[ "${lines[1]}" == " hosts block <hostname>" ]]
}
# `hosts block <hostname>` ####################################################
# `hosts block <hostname>` #################################################
@test "\`block <hostname>\` exits with status 0." {
run "${_HOSTS}" block example.com
@ -46,7 +46,7 @@ load test_helper
_compare "${_original}" "$(cat "${HOSTS_PATH}")"
_compare '127.0.0.1 example.com' "$(sed -n '11p' "${HOSTS_PATH}")"
[[ "$(cat "${HOSTS_PATH}")" != "${_original}" ]]
[[ "$(sed -n '11p' "${HOSTS_PATH}")" =~ 127.0.0.1[[:space:]]+example.com ]]
[[ "$(sed -n '11p' "${HOSTS_PATH}")" == "127.0.0.1 example.com" ]]
}
@test "\`block <hostname>\` prints feedback." {
@ -54,52 +54,11 @@ load test_helper
printf "\${status}: %s\\n" "${status}"
printf "\${output}: '%s'\\n" "${output}"
[[ "${lines[0]}" == "Added:" ]]
[[ "${lines[1]}" =~ 127.0.0.1[[:space:]]+example.com ]]
[[ "${lines[1]}" == "127.0.0.1 example.com" ]]
[[ "${lines[2]}" == "Added:" ]]
[[ "${lines[3]}" =~ fe80\:\:1\%lo0[[:space:]]example.com ]]
[[ "${lines[3]}" == "fe80::1%lo0 example.com" ]]
[[ "${lines[4]}" == "Added:" ]]
[[ "${lines[5]}" =~ \:\:1[[:space:]]+example.com ]]
}
# `hosts block <hostname> <hostname2>` ########################################
@test "\`block <hostname> <hostname2>\` exits with status 0." {
run "${_HOSTS}" block example.com example2.com
printf "\${status}: %s\\n" "${status}"
printf "\${output}: '%s'\\n" "${output}"
[[ ${status} -eq 0 ]]
}
@test "\`block <hostname> <hostname2>\` adds entries to the hosts file." {
_original="$(cat "${HOSTS_PATH}")"
run "${_HOSTS}" block example.com example2.com
printf "\${status}: %s\\n" "${status}"
printf "\${output}: '%s'\\n" "${output}"
_compare "${_original}" "$(cat "${HOSTS_PATH}")"
_compare '127.0.0.1 example.com' "$(sed -n '11p' "${HOSTS_PATH}")"
_compare '127.0.0.1 example2.com' "$(sed -n '11p' "${HOSTS_PATH}")"
[[ "$(cat "${HOSTS_PATH}")" != "${_original}" ]]
[[ "$(sed -n '11p' "${HOSTS_PATH}")" =~ 127.0.0.1[[:space:]]+example.com ]]
[[ "$(sed -n '14p' "${HOSTS_PATH}")" =~ 127.0.0.1[[:space:]]+example2.com ]]
}
@test "\`block <hostname> <hostname2>\` prints feedback." {
run "${_HOSTS}" block example.com example2.com
printf "\${status}: %s\\n" "${status}"
printf "\${output}: '%s'\\n" "${output}"
[[ "${lines[0]}" == "Added:" ]]
[[ "${lines[1]}" =~ 127.0.0.1[[:space:]]+example.com ]]
[[ "${lines[2]}" == "Added:" ]]
[[ "${lines[3]}" =~ fe80\:\:1\%lo0[[:space:]]+example.com ]]
[[ "${lines[4]}" == "Added:" ]]
[[ "${lines[5]}" =~ \:\:1[[:space:]]+example.com ]]
[[ "${lines[6]}" == "Added:" ]]
[[ "${lines[7]}" =~ 127.0.0.1[[:space:]]+example2.com ]]
[[ "${lines[8]}" == "Added:" ]]
[[ "${lines[9]}" =~ fe80\:\:1\%lo0[[:space:]]+example2.com ]]
[[ "${lines[10]}" == "Added:" ]]
[[ "${lines[11]}" =~ \:\:1[[:space:]]+example2.com ]]
[[ "${lines[5]}" == "::1 example.com" ]]
}
# help ########################################################################
@ -114,5 +73,5 @@ load test_helper
printf "\${status}: %s\\n" "${status}"
printf "\${output}: '%s'\\n" "${output}"
[[ "${lines[0]}" == "Usage:" ]]
[[ "${lines[1]}" == " hosts block <hostname>..." ]]
[[ "${lines[1]}" == " hosts block <hostname>" ]]
}

View File

@ -53,8 +53,8 @@ load test_helper
printf "\${status}: %s\\n" "${status}"
printf "\${output}: '%s'\\n" "${output}"
_compare "${_original}" "$(cat "${HOSTS_PATH}")"
[[ "$(sed -n '11p' "${HOSTS_PATH}")" =~ \#disabled\:\ 0.0.0.0[[:space:]]+example.com ]]
[[ "$(sed -n '12p' "${HOSTS_PATH}")" =~ 127.0.0.1[[:space:]]+example.net ]]
[[ "$(sed -n '11p' "${HOSTS_PATH}")" == "#disabled: 0.0.0.0 example.com" ]]
[[ "$(sed -n '12p' "${HOSTS_PATH}")" == "127.0.0.1 example.net" ]]
}
@test "\`disable <ip>\` disables all matches." {
@ -68,8 +68,8 @@ load test_helper
printf "\${status}: %s\\n" "${status}"
printf "\${output}: '%s'\\n" "${output}"
_compare "${_original}" "$(cat "${HOSTS_PATH}")"
[[ "$(sed -n '11p' "${HOSTS_PATH}")" =~ \#disabled\:\ 0.0.0.0[[:space:]]+example.com ]]
[[ "$(sed -n '12p' "${HOSTS_PATH}")" =~ \#disabled\:\ 0.0.0.0[[:space:]]+example.net ]]
[[ "$(sed -n '11p' "${HOSTS_PATH}")" == "#disabled: 0.0.0.0 example.com" ]]
[[ "$(sed -n '12p' "${HOSTS_PATH}")" == "#disabled: 0.0.0.0 example.net" ]]
}
@test "\`disable <ip>\` prints feedback." {
@ -82,7 +82,7 @@ load test_helper
printf "\${status}: %s\\n" "${status}"
printf "\${output}: '%s'\\n" "${output}"
[[ "${lines[0]}" == "Disabling:" ]]
[[ "${lines[1]}" =~ 0.0.0.0[[:space:]]+example.com ]]
[[ "${lines[1]}" == "0.0.0.0 example.com" ]]
}
# `hosts disable <hostname>` ##################################################
@ -110,8 +110,8 @@ load test_helper
printf "\${status}: %s\\n" "${status}"
printf "\${output}: '%s'\\n" "${output}"
_compare "${_original}" "$(cat "${HOSTS_PATH}")"
[[ "$(sed -n '11p' "${HOSTS_PATH}")" =~ \#disabled\:\ 0.0.0.0[[:space:]]+example.com ]]
[[ "$(sed -n '12p' "${HOSTS_PATH}")" =~ 127.0.0.1[[:space:]]+example.net ]]
[[ "$(sed -n '11p' "${HOSTS_PATH}")" == "#disabled: 0.0.0.0 example.com" ]]
[[ "$(sed -n '12p' "${HOSTS_PATH}")" == "127.0.0.1 example.net" ]]
}
@test "\`disable <hostname>\` disables all matches." {
@ -125,8 +125,8 @@ load test_helper
printf "\${status}: %s\\n" "${status}"
printf "\${output}: '%s'\\n" "${output}"
_compare "${_original}" "$(cat "${HOSTS_PATH}")"
[[ "$(sed -n '11p' "${HOSTS_PATH}")" =~ \#disabled\:\ 0.0.0.0[[:space:]]+example.com ]]
[[ "$(sed -n '12p' "${HOSTS_PATH}")" =~ 127.0.0.1[[:space:]]+example.com ]]
[[ "$(sed -n '11p' "${HOSTS_PATH}")" == "#disabled: 0.0.0.0 example.com" ]]
[[ "$(sed -n '12p' "${HOSTS_PATH}")" == "#disabled: 127.0.0.1 example.com" ]]
}
@test "\`disable <hostname>\` prints feedback." {
@ -139,7 +139,7 @@ load test_helper
printf "\${status}: %s\\n" "${status}"
printf "\${output}: '%s'\\n" "${output}"
[[ "${lines[0]}" == "Disabling:" ]]
[[ "${lines[1]}" =~ 0.0.0.0[[:space:]]+example.com ]]
[[ "${lines[1]}" == "0.0.0.0 example.com" ]]
}
# help ########################################################################

View File

@ -2,7 +2,7 @@
load test_helper
# `hosts disabled` ############################################################
# `hosts disabled` #############################################################
@test "\`disabled\` with no arguments exits with status 0." {
{
@ -18,7 +18,7 @@ load test_helper
[[ ${status} -eq 0 ]]
}
@test "\`disabled\` with no arguments prints list of disabled entries." {
@test "\`disabled\` with no arguments prints list of disabled records." {
{
run "${_HOSTS}" add 0.0.0.0 example.com
run "${_HOSTS}" add 0.0.0.0 example.net
@ -29,18 +29,11 @@ load test_helper
run "${_HOSTS}" disabled
printf "\${status}: %s\\n" "${status}"
printf "\${output}: '%s'\\n" "${output}"
[[ "${lines[0]}" =~ 0\.0\.0\.0[[:space:]]+example\.com ]]
[[ "${lines[1]}" =~ 127\.0\.0\.1[[:space:]]+example\.com ]]
[[ "${lines[0]}" == "0.0.0.0 example.com" ]]
[[ "${lines[1]}" == "127.0.0.1 example.com" ]]
[[ "${lines[2]}" == "" ]]
}
@test "\`disabled\` exits with status 1 when no matching entries found." {
run "${_HOSTS}" disabled
printf "\${status}: %s\\n" "${status}"
printf "\${output}: '%s'\\n" "${output}"
[[ ${status} -eq 1 ]]
}
# help ########################################################################
@test "\`help disabled\` exits with status 0." {

View File

@ -58,9 +58,9 @@ load test_helper
printf "\${status}: %s\\n" "${status}"
printf "\${output}: '%s'\\n" "${output}"
_compare "${_original}" "$(cat "${HOSTS_PATH}")"
[[ "$(sed -n '11p' "${HOSTS_PATH}")" =~ \#disabled:\ 0.0.0.0[[:space:]]+example.com ]]
[[ "$(sed -n '12p' "${HOSTS_PATH}")" =~ \#disabled:\ 0.0.0.0[[:space:]]+example.net ]]
[[ "$(sed -n '13p' "${HOSTS_PATH}")" =~ 127.0.0.2[[:space:]]+example.com ]]
[[ "$(sed -n '11p' "${HOSTS_PATH}")" == "#disabled: 0.0.0.0 example.com" ]]
[[ "$(sed -n '12p' "${HOSTS_PATH}")" == "#disabled: 0.0.0.0 example.net" ]]
[[ "$(sed -n '13p' "${HOSTS_PATH}")" == "127.0.0.2 example.com" ]]
}
@test "\`enable <ip>\` enables all matches." {
@ -89,12 +89,12 @@ load test_helper
"'#disabled: 127.0.0.2 example.com'" \
"'$(sed -n '13p' "${HOSTS_PATH}")'"
[[ "$(sed -n '11p' "${HOSTS_PATH}")" =~ 0.0.0.0[[:space:]]+example.com ]]
[[ "$(sed -n '12p' "${HOSTS_PATH}")" =~ 0.0.0.0[[:space:]]+example.net ]]
[[ "$(sed -n '13p' "${HOSTS_PATH}")" =~ \#disabled:\ 127.0.0.2[[:space:]]+example.com ]]
[[ "$(sed -n '11p' "${HOSTS_PATH}")" == "0.0.0.0 example.com" ]]
[[ "$(sed -n '12p' "${HOSTS_PATH}")" == "0.0.0.0 example.net" ]]
[[ "$(sed -n '13p' "${HOSTS_PATH}")" == "#disabled: 127.0.0.2 example.com" ]]
}
@test "\`enable <ip>\` prints feedback." {
@test "\`disable <ip>\` prints feedback." {
{
run "${_HOSTS}" add 0.0.0.0 example.com
run "${_HOSTS}" add 0.0.0.0 example.net
@ -106,7 +106,7 @@ load test_helper
printf "\${status}: %s\\n" "${status}"
printf "\${output}: '%s'\\n" "${output}"
[[ "${lines[0]}" == "Enabling:" ]]
[[ "${lines[1]}" =~ 127.0.0.2[[:space:]]+example.com ]]
[[ "${lines[1]}" == "127.0.0.2 example.com" ]]
}
# `hosts enable <hostname>` ###################################################
@ -138,9 +138,9 @@ load test_helper
printf "\${status}: %s\\n" "${status}"
printf "\${output}: '%s'\\n" "${output}"
_compare "${_original}" "$(cat "${HOSTS_PATH}")"
[[ "$(sed -n '11p' "${HOSTS_PATH}")" =~ \#disabled:\ 0.0.0.0[[:space:]]+example.com ]]
[[ "$(sed -n '12p' "${HOSTS_PATH}")" =~ 0.0.0.0[[:space:]]+example.net ]]
[[ "$(sed -n '13p' "${HOSTS_PATH}")" =~ 127.0.0.2[[:space:]]+example.com ]]
[[ "$(sed -n '11p' "${HOSTS_PATH}")" == "#disabled: 0.0.0.0 example.com" ]]
[[ "$(sed -n '12p' "${HOSTS_PATH}")" == "0.0.0.0 example.net" ]]
[[ "$(sed -n '13p' "${HOSTS_PATH}")" == "127.0.0.2 example.com" ]]
}
@test "\`enable <hostname>\` enables all matches." {
@ -169,12 +169,12 @@ load test_helper
"'127.0.0.2 example.com'" \
"'$(sed -n '13p' "${HOSTS_PATH}")'"
[[ "$(sed -n '11p' "${HOSTS_PATH}")" =~ 0.0.0.0[[:space:]]+example.com ]]
[[ "$(sed -n '12p' "${HOSTS_PATH}")" =~ \#disabled:\ 0.0.0.0[[:space:]]+example.net ]]
[[ "$(sed -n '13p' "${HOSTS_PATH}")" =~ 127.0.0.2[[:space:]]+example.com ]]
[[ "$(sed -n '11p' "${HOSTS_PATH}")" == "0.0.0.0 example.com" ]]
[[ "$(sed -n '12p' "${HOSTS_PATH}")" == "#disabled: 0.0.0.0 example.net" ]]
[[ "$(sed -n '13p' "${HOSTS_PATH}")" == "127.0.0.2 example.com" ]]
}
@test "\`enable <hostname>\` prints feedback." {
@test "\`disable <hostname>\` prints feedback." {
{
run "${_HOSTS}" add 0.0.0.0 example.com
run "${_HOSTS}" add 0.0.0.0 example.net
@ -186,7 +186,7 @@ load test_helper
printf "\${status}: %s\\n" "${status}"
printf "\${output}: '%s'\\n" "${output}"
[[ "${lines[0]}" == "Enabling:" ]]
[[ "${lines[1]}" =~ 0.0.0.0[[:space:]]+example.net ]]
[[ "${lines[1]}" == "0.0.0.0 example.net" ]]
}
# help ########################################################################

View File

@ -18,7 +18,7 @@ load test_helper
[[ ${status} -eq 0 ]]
}
@test "\`enabled\` with no arguments prints list of enabled entries." {
@test "\`enabled\` with no arguments prints list of enabled records." {
{
run "${_HOSTS}" add 0.0.0.0 example.com
run "${_HOSTS}" add 0.0.0.0 example.net
@ -29,23 +29,11 @@ load test_helper
run "${_HOSTS}" enabled
printf "\${status}: %s\\n" "${status}"
printf "\${output}: '%s'\\n" "${output}"
[[ "${lines[0]}" =~ 127.0.0.1[[:space:]]+localhost ]]
[[ "${lines[1]}" =~ 255.255.255.255[[:space:]]+broadcasthost ]]
[[ "${lines[2]}" =~ \:\:1[[:space:]]+localhost ]]
[[ "${lines[3]}" =~ fe80\:\:1\%lo0[[:space:]]+localhost ]]
[[ "${lines[4]}" =~ 127.0.0.2[[:space:]]+example.com ]]
}
@test "\`enabled\` exits with status 1 when no matching entries found." {
{
run "${_HOSTS}" disable localhost
run "${_HOSTS}" disable broadcasthost
}
run "${_HOSTS}" enabled
printf "\${status}: %s\\n" "${status}"
printf "\${output}: '%s'\\n" "${output}"
[[ ${status} -eq 1 ]]
[[ "${lines[0]}" == "127.0.0.1 localhost" ]]
[[ "${lines[1]}" == "255.255.255.255 broadcasthost" ]]
[[ "${lines[2]}" == "::1 localhost" ]]
[[ "${lines[3]}" == "fe80::1%lo0 localhost" ]]
[[ "${lines[4]}" == "127.0.0.2 example.com" ]]
}
# help ########################################################################

View File

@ -1 +0,0 @@
#!/usr/bin/env bash

View File

@ -10,9 +10,9 @@ load test_helper
@test "\`hosts\` with no arguments prints enabled rules." {
run "${_HOSTS}"
[[ "${#lines[@]}" -eq 4 ]]
[[ "${lines[0]}" =~ 127.0.0.1[[:space:]]+localhost ]]
[[ "${lines[1]}" =~ 255.255.255.255[[:space:]]+broadcasthost ]]
[[ "${lines[2]}" =~ \:\:1[[:space:]]+localhost ]]
[[ "${lines[3]}" =~ fe80\:\:1\%lo0[[:space:]]+localhost ]]
[[ "${lines[0]}" == "127.0.0.1 localhost" ]]
[[ "${lines[1]}" == "255.255.255.255 broadcasthost" ]]
[[ "${lines[2]}" == "::1 localhost" ]]
[[ "${lines[3]}" == "fe80::1%lo0 localhost" ]]
[[ "${lines[4]}" == "" ]]
}

View File

@ -2,7 +2,7 @@
load test_helper
# `hosts list` ################################################################
# `hosts list` #############################################################
@test "\`list\` exits with status 0." {
{
@ -18,7 +18,7 @@ load test_helper
[[ ${status} -eq 0 ]]
}
@test "\`list\` prints lists of enabled and disabled entries." {
@test "\`list\` prints lists of enabled and disabled records." {
{
run "${_HOSTS}" add 0.0.0.0 example.com
run "${_HOSTS}" add 0.0.0.0 example.net
@ -37,7 +37,6 @@ fe80::1%lo0 localhost
127.0.0.2 example.com
Disabled:
---------
0.0.0.0 example.com
0.0.0.0 example.net"
_compare "'${_expected}'" "'${output}'"
@ -60,7 +59,7 @@ Disabled:
[[ ${status} -eq 0 ]]
}
@test "\`list enabled\` prints list of enabled entries." {
@test "\`list enabled\` prints list of enabled records." {
{
run "${_HOSTS}" add 0.0.0.0 example.com
run "${_HOSTS}" add 0.0.0.0 example.net
@ -71,23 +70,11 @@ Disabled:
run "${_HOSTS}" list enabled
printf "\${status}: %s\\n" "${status}"
printf "\${output}: '%s'\\n" "${output}"
[[ "${lines[0]}" =~ 127\.0\.0\.1[[:space:]]+localhost ]]
[[ "${lines[1]}" =~ 255\.255\.255\.255[[:space:]]+broadcasthost ]]
[[ "${lines[2]}" =~ \:\:1[[:space:]]+localhost ]]
[[ "${lines[3]}" =~ fe80\:\:1\%lo0[[:space:]]+localhost ]]
[[ "${lines[4]}" =~ 127\.0\.0\.2[[:space:]]+example.com ]]
}
@test "\`list enabled\` exits with status 1 when no matching entries found." {
{
run "${_HOSTS}" disable localhost
run "${_HOSTS}" disable broadcasthost
}
run "${_HOSTS}" list enabled
printf "\${status}: %s\\n" "${status}"
printf "\${output}: '%s'\\n" "${output}"
[[ ${status} -eq 1 ]]
[[ "${lines[0]}" == "127.0.0.1 localhost" ]]
[[ "${lines[1]}" == "255.255.255.255 broadcasthost" ]]
[[ "${lines[2]}" == "::1 localhost" ]]
[[ "${lines[3]}" == "fe80::1%lo0 localhost" ]]
[[ "${lines[4]}" == "127.0.0.2 example.com" ]]
}
# `hosts list disabled` #######################################################
@ -106,7 +93,7 @@ Disabled:
[[ ${status} -eq 0 ]]
}
@test "\`list disabled\` prints list of disabled entries." {
@test "\`list disabled\` prints list of disabled records." {
{
run "${_HOSTS}" add 0.0.0.0 example.com
run "${_HOSTS}" add 0.0.0.0 example.net
@ -117,18 +104,11 @@ Disabled:
run "${_HOSTS}" list disabled
printf "\${status}: %s\\n" "${status}"
printf "\${output}: '%s'\\n" "${output}"
[[ "${lines[0]}" =~ 0\.0\.0\.0[[:space:]]+example\.com ]]
[[ "${lines[1]}" =~ 127\.0\.0\.1[[:space:]]+example\.com ]]
[[ "${lines[0]}" == "0.0.0.0 example.com" ]]
[[ "${lines[1]}" == "127.0.0.1 example.com" ]]
[[ "${lines[2]}" == "" ]]
}
@test "\`list disabled\` exits with status 1 when no matching entries found." {
run "${_HOSTS}" list disabled
printf "\${status}: %s\\n" "${status}"
printf "\${output}: '%s'\\n" "${output}"
[[ ${status} -eq 1 ]]
}
# `hosts list <search string>` ################################################
@test "\`list <search string>\` exits with status 0." {
@ -144,7 +124,7 @@ Disabled:
[[ ${status} -eq 0 ]]
}
@test "\`list <search string>\` prints list of matching entries." {
@test "\`list <search string>\` prints list of matching records." {
{
run "${_HOSTS}" add 0.0.0.0 example.com
run "${_HOSTS}" add 0.0.0.0 example.net
@ -154,50 +134,11 @@ Disabled:
run "${_HOSTS}" list example.com
printf "\${status}: %s\\n" "${status}"
printf "\${output}: '%s'\\n" "${output}"
[[ "${lines[0]}" =~ 0\.0\.0\.0[[:space:]]+example\.com ]]
[[ "${lines[1]}" =~ 127\.0\.0\.1[[:space:]]+example\.com ]]
[[ "${lines[0]}" == "0.0.0.0 example.com" ]]
[[ "${lines[1]}" == "127.0.0.1 example.com" ]]
[[ "${lines[2]}" == "" ]]
}
@test "\`list <search string>\` prints entries with matching comments." {
{
run "${_HOSTS}" add 0.0.0.0 example.com
run "${_HOSTS}" add 0.0.0.0 example.net "Example Comment"
run "${_HOSTS}" add 127.0.0.1 example.com
}
run "${_HOSTS}" list "Comment"
printf "\${status}: %s\\n" "${status}"
printf "\${output}: '%s'\\n" "${output}"
[[ "${lines[0]}" =~ 0\.0\.0\.0[[:space:]]+example\.net[[:space:]]+\#\ Example\ Comment ]]
[[ "${lines[2]}" == "" ]]
}
@test "\`list <search string>\` prints disabled entries with matching comments." {
{
run "${_HOSTS}" add 0.0.0.0 example.com
run "${_HOSTS}" add 0.0.0.0 example.net "Example Comment"
run "${_HOSTS}" add 127.0.0.1 example.com
run "${_HOSTS}" add 127.0.0.1 example.biz "Example Comment"
run "${_HOSTS}" disable example.biz
}
run "${_HOSTS}" list "Comment"
printf "\${status}: %s\\n" "${status}"
printf "\${output}: '%s'\\n" "${output}"
[[ "${lines[0]}" =~ 0\.0\.0\.0[[:space:]]+example\.net[[:space:]]+\#\ Example\ Comment ]]
[[ "${lines[3]}" =~ 127\.0\.0\.1[[:space:]]+example\.biz[[:space:]]+\#\ Example\ Comment ]]
[[ "${lines[4]}" == "" ]]
}
@test "\`list <search string>\` exits with status 1 when no matching entries found." {
run "${_HOSTS}" list query-that-matches-no-entries
printf "\${status}: %s\\n" "${status}"
printf "\${output}: '%s'\\n" "${output}"
[[ ${status} -eq 1 ]]
}
# help ########################################################################
@test "\`help list\` exits with status 0." {

View File

@ -2,7 +2,7 @@
load test_helper
# `hosts remove` ##############################################################
# `hosts remove` #################################################################
@test "\`remove\` with no arguments exits with status 1." {
run "${_HOSTS}" remove
@ -53,7 +53,7 @@ load test_helper
run "${_HOSTS}" remove 127.0.0.3 --force
printf "\${status}: %s\\n" "${status}"
printf "\${output}: '%s'\\n" "${output}"
[[ ${output} == "${_ERROR_PREFIX}No matching entries found." ]]
[[ ${output} == "No matching records found." ]]
}
# `hosts remove <ip> --force` #################################################
@ -83,8 +83,8 @@ load test_helper
printf "\${status}: %s\\n" "${status}"
printf "\${output}: '%s'\\n" "${output}"
_compare "${_original}" "$(cat "${HOSTS_PATH}")"
[[ "$(sed -n '11p' "${HOSTS_PATH}")" =~ 0.0.0.0[[:space:]]+example.com ]]
[[ "$(sed -n '12p' "${HOSTS_PATH}")" =~ 0.0.0.0[[:space:]]+example.net ]]
[[ "$(sed -n '11p' "${HOSTS_PATH}")" == "0.0.0.0 example.com" ]]
[[ "$(sed -n '12p' "${HOSTS_PATH}")" == "0.0.0.0 example.net" ]]
[[ "$(sed -n '13p' "${HOSTS_PATH}")" == "" ]]
}
@ -129,7 +129,7 @@ fe80::1%lo0 localhost
printf "\${status}: %s\\n" "${status}"
printf "\${output}: '%s'\\n" "${output}"
[[ "${lines[0]}" == "Removed:" ]]
[[ "${lines[1]}" =~ 127.0.0.2[[:space:]]+example.com ]]
[[ "${lines[1]}" == "127.0.0.2 example.com" ]]
}
# `hosts remove <hostname> --force` ###########################################
@ -159,7 +159,7 @@ fe80::1%lo0 localhost
printf "\${status}: %s\\n" "${status}"
printf "\${output}: '%s'\\n" "${output}"
_compare "${_original}" "$(cat "${HOSTS_PATH}")"
[[ "$(sed -n '11p' "${HOSTS_PATH}")" =~ 0.0.0.0[[:space:]]+example.net ]]
[[ "$(sed -n '11p' "${HOSTS_PATH}")" == "0.0.0.0 example.net" ]]
[[ "$(sed -n '12p' "${HOSTS_PATH}")" == "" ]]
}

View File

@ -2,7 +2,7 @@
load test_helper
# `hosts search` ##############################################################
# `hosts search` #############################################################
@test "\`search\` with no arguments exits with status 1." {
{
@ -29,8 +29,14 @@ load test_helper
run "${_HOSTS}" search
printf "\${status}: %s\\n" "${status}"
printf "\${output}: '%s'\\n" "${output}"
[[ "${lines[0]}" == "Usage:" ]]
[[ "${lines[1]}" == " hosts search <search string>" ]]
_expected="\
Usage:
hosts search <search string>
Description:
Search entries for <search string>."
_compare "'${_expected}'" "'${output}'"
[[ "${output}" == "${_expected}" ]]
}
# `hosts search enabled` ######################################################
@ -49,7 +55,7 @@ load test_helper
[[ ${status} -eq 0 ]]
}
@test "\`search enabled\` prints list of enabled entries." {
@test "\`search enabled\` prints list of enabled records." {
{
run "${_HOSTS}" add 0.0.0.0 example.com
run "${_HOSTS}" add 0.0.0.0 example.net
@ -60,26 +66,14 @@ load test_helper
run "${_HOSTS}" search enabled
printf "\${status}: %s\\n" "${status}"
printf "\${output}: '%s'\\n" "${output}"
[[ "${lines[0]}" =~ 127.0.0.1[[:space:]]+localhost ]]
[[ "${lines[1]}" =~ 255.255.255.255[[:space:]]+broadcasthost ]]
[[ "${lines[2]}" =~ \:\:1[[:space:]]+localhost ]]
[[ "${lines[3]}" =~ fe80\:\:1\%lo0[[:space:]]+localhost ]]
[[ "${lines[4]}" =~ 127.0.0.2[[:space:]]+example.com ]]
[[ "${lines[0]}" == "127.0.0.1 localhost" ]]
[[ "${lines[1]}" == "255.255.255.255 broadcasthost" ]]
[[ "${lines[2]}" == "::1 localhost" ]]
[[ "${lines[3]}" == "fe80::1%lo0 localhost" ]]
[[ "${lines[4]}" == "127.0.0.2 example.com" ]]
}
@test "\`search enabled\` exits with status 1 when no matching entries found." {
{
run "${_HOSTS}" disable localhost
run "${_HOSTS}" disable broadcasthost
}
run "${_HOSTS}" search enabled
printf "\${status}: %s\\n" "${status}"
printf "\${output}: '%s'\\n" "${output}"
[[ ${status} -eq 1 ]]
}
# `hosts search disabled` #####################################################
# `hosts search disabled` #######################################################
@test "\`search disabled\` exits with status 0." {
{
@ -95,7 +89,7 @@ load test_helper
[[ ${status} -eq 0 ]]
}
@test "\`search disabled\` prints list of disabled entries." {
@test "\`search disabled\` prints list of disabled records." {
{
run "${_HOSTS}" add 0.0.0.0 example.com
run "${_HOSTS}" add 0.0.0.0 example.net
@ -106,18 +100,11 @@ load test_helper
run "${_HOSTS}" search disabled
printf "\${status}: %s\\n" "${status}"
printf "\${output}: '%s'\\n" "${output}"
[[ "${lines[0]}" =~ 0.0.0.0[[:space:]]+example.com ]]
[[ "${lines[1]}" =~ 127.0.0.1[[:space:]]+example.com ]]
[[ "${lines[0]}" == "0.0.0.0 example.com" ]]
[[ "${lines[1]}" == "127.0.0.1 example.com" ]]
[[ "${lines[2]}" == "" ]]
}
@test "\`search disabled\` exits with status 1 when no matching entries found." {
run "${_HOSTS}" search disabled
printf "\${status}: %s\\n" "${status}"
printf "\${output}: '%s'\\n" "${output}"
[[ ${status} -eq 1 ]]
}
# `hosts search <search string>` ################################################
@test "\`search <search string>\` exits with status 0." {
@ -133,7 +120,7 @@ load test_helper
[[ ${status} -eq 0 ]]
}
@test "\`search <search string>\` prints list of matching entries." {
@test "\`search <search string>\` prints list of matching records." {
{
run "${_HOSTS}" add 0.0.0.0 example.com
run "${_HOSTS}" add 0.0.0.0 example.net
@ -143,49 +130,11 @@ load test_helper
run "${_HOSTS}" search example.com
printf "\${status}: %s\\n" "${status}"
printf "\${output}: '%s'\\n" "${output}"
[[ "${lines[0]}" =~ 0.0.0.0[[:space:]]+example.com ]]
[[ "${lines[1]}" =~ 127.0.0.1[[:space:]]+example.com ]]
[[ "${lines[0]}" == "0.0.0.0 example.com" ]]
[[ "${lines[1]}" == "127.0.0.1 example.com" ]]
[[ "${lines[2]}" == "" ]]
}
@test "\`search <search string>\` prints entries with matching comments." {
{
run "${_HOSTS}" add 0.0.0.0 example.com
run "${_HOSTS}" add 0.0.0.0 example.net "Example Comment"
run "${_HOSTS}" add 127.0.0.1 example.com
}
run "${_HOSTS}" search "Comment"
printf "\${status}: %s\\n" "${status}"
printf "\${output}: '%s'\\n" "${output}"
[[ "${lines[0]}" =~ 0.0.0.0[[:space:]]+example.net[[:space:]]+\#\ Example\ Comment ]]
[[ "${lines[2]}" == "" ]]
}
@test "\`search <search string>\` prints disabled entries with matching comments." {
{
run "${_HOSTS}" add 0.0.0.0 example.com
run "${_HOSTS}" add 0.0.0.0 example.net "Example Comment"
run "${_HOSTS}" add 127.0.0.1 example.com
run "${_HOSTS}" add 127.0.0.1 example.biz "Example Comment"
run "${_HOSTS}" disable example.biz
}
run "${_HOSTS}" search "Comment"
printf "\${status}: %s\\n" "${status}"
printf "\${output}: '%s'\\n" "${output}"
[[ "${lines[0]}" =~ 0.0.0.0[[:space:]]+example.net[[:space:]]+\#\ Example\ Comment ]]
[[ "${lines[3]}" =~ 127.0.0.1[[:space:]]+example.biz[[:space:]]+\#\ Example\ Comment ]]
[[ "${lines[4]}" == "" ]]
}
@test "\`search <search string>\` exits with status 1 when no matching entries found." {
run "${_HOSTS}" search query-that-matches-no-entries
printf "\${status}: %s\\n" "${status}"
printf "\${output}: '%s'\\n" "${output}"
[[ ${status} -eq 1 ]]
}
# help ########################################################################
@test "\`help search\` exits with status 0." {

View File

@ -2,7 +2,7 @@
load test_helper
# `hosts show` ################################################################
# `hosts show` ##############################################################
@test "\`show\` with no arguments exits with status 1." {
run "${_HOSTS}" show
@ -19,27 +19,9 @@ load test_helper
[[ "${lines[1]}" == " hosts show (<ip> | <hostname> | <search string>)" ]]
}
# `hosts show <no matching>` ##################################################
# `hosts show <ip>` #########################################################
@test "\`show <query>\` with no matching entries with status 1." {
{
run "${_HOSTS}" add 0.0.0.0 example.com
run "${_HOSTS}" add 0.0.0.0 example.net
run "${_HOSTS}" add 127.0.0.2 example.com
run "${_HOSTS}" disable example.com
}
run "${_HOSTS}" show bad-query
printf "\${status}: %s\\n" "${status}"
printf "\${output}: '%s'\\n" "${output}"
[[ ${status} -eq 1 ]]
[[ "${lines[0]}" =~ No\ matching\ entries ]]
}
# `hosts show <ip>` ###########################################################
@test "\`show <ip>\` exits with status 0 and shows all matches." {
@test "\`show <ip>\` exits with status 0." {
{
run "${_HOSTS}" add 0.0.0.0 example.com
run "${_HOSTS}" add 0.0.0.0 example.net
@ -51,14 +33,27 @@ load test_helper
printf "\${status}: %s\\n" "${status}"
printf "\${output}: '%s'\\n" "${output}"
[[ ${status} -eq 0 ]]
}
[[ "${lines[0]}" =~ 0\.0\.0\.0[[:space:]]+example.net ]]
[[ "${lines[3]}" =~ 0\.0\.0\.0[[:space:]]+example.com ]]
@test "\`enable <ip>\` shows all matches." {
{
run "${_HOSTS}" add 0.0.0.0 example.com
run "${_HOSTS}" add 0.0.0.0 example.net
run "${_HOSTS}" add 127.0.0.2 example.com
run "${_HOSTS}" disable example.com
}
run "${_HOSTS}" show 0.0.0.0
printf "\${status}: %s\\n" "${status}"
printf "\${output}: '%s'\\n" "${output}"
[[ "${lines[0]}" == "0.0.0.0 example.net" ]]
[[ "${lines[1]}" == "disabled: 0.0.0.0 example.com" ]]
}
# `hosts show <hostname>` #####################################################
@test "\`show <hostname>\` exits with status 0 and shows all matches." {
@test "\`show <hostname>\` exits with status 0." {
{
run "${_HOSTS}" add 0.0.0.0 example.com
run "${_HOSTS}" add 0.0.0.0 example.net
@ -70,60 +65,22 @@ load test_helper
printf "\${status}: %s\\n" "${status}"
printf "\${output}: '%s'\\n" "${output}"
[[ ${status} -eq 0 ]]
[[ "${lines[0]}" =~ 127\.0\.0\.2[[:space:]]+example.com ]]
[[ "${lines[3]}" =~ 0\.0\.0\.0[[:space:]]+example.com ]]
}
# `hosts show <search string>` ################################################
@test "\`show <search string>\` exits with status 0 and shows matching entries." {
@test "\`enable <hostname>\` shows all matches." {
{
run "${_HOSTS}" add 0.0.0.0 example.com
run "${_HOSTS}" add 0.0.0.0 example.net
run "${_HOSTS}" add 127.0.0.1 example.com
run "${_HOSTS}" add 127.0.0.2 example.com
run "${_HOSTS}" disable 0.0.0.0
}
run "${_HOSTS}" show example.com
printf "\${status}: %s\\n" "${status}"
printf "\${output}: '%s'\\n" "${output}"
[[ ${status} -eq 0 ]]
[[ "${lines[0]}" =~ 0\.0\.0\.0[[:space:]]+example.com ]]
[[ "${lines[1]}" =~ 127\.0\.0\.1[[:space:]]+example.com ]]
[[ "${lines[2]}" == "" ]]
}
@test "\`show <search string>\` prints entries with matching comments." {
{
run "${_HOSTS}" add 0.0.0.0 example.com
run "${_HOSTS}" add 0.0.0.0 example.net "Example Comment"
run "${_HOSTS}" add 127.0.0.1 example.com
}
run "${_HOSTS}" show "Comment"
printf "\${status}: %s\\n" "${status}"
printf "\${output}: '%s'\\n" "${output}"
printf "\${lines[0]}: '%s'\\n" "${lines[0]}"
[[ "${lines[0]}" =~ 0\.0\.0\.0[[:space:]]+example\.net[[:space:]]+\#\ Example\ Comment ]]
[[ "${lines[2]}" == "" ]]
}
@test "\`show <search string>\` prints disabled entries with matching comments." {
{
run "${_HOSTS}" add 0.0.0.0 example.com
run "${_HOSTS}" add 0.0.0.0 example.net "Example Comment"
run "${_HOSTS}" add 127.0.0.1 example.com
run "${_HOSTS}" add 127.0.0.1 example.biz "Example Comment"
run "${_HOSTS}" disable example.biz
}
run "${_HOSTS}" show "Comment"
printf "\${status}: %s\\n" "${status}"
printf "\${output}: '%s'\\n" "${output}"
[[ "${lines[0]}" =~ 0\.0\.0\.0[[:space:]]+example\.net[[:space:]]+\#\ Example\ Comment ]]
[[ "${lines[3]}" =~ 127\.0\.0\.1[[:space:]]+example\.biz[[:space:]]+\#\ Example\ Comment ]]
[[ "${lines[4]}" == "" ]]
[[ "${lines[0]}" == "127.0.0.2 example.com" ]]
[[ "${lines[1]}" == "disabled: 0.0.0.0 example.com" ]]
}
# help ########################################################################

View File

@ -12,22 +12,11 @@ setup() {
# The location of the `hosts` script being tested.
export _HOSTS="${BATS_TEST_DIRNAME}/../hosts"
export _HOSTS_TEMP_DIR
_HOSTS_TEMP_DIR="$(mktemp -d)"
export _HOSTS_TEMP_PATH
_HOSTS_TEMP_PATH="${_HOSTS_TEMP_DIR}/hosts"
export _ERROR_PREFIX
_ERROR_PREFIX="$(tput setaf 1)!$(tput sgr0) "
_HOSTS_TEMP_PATH="$(mktemp /tmp/hosts_test.XXXXXX)" || exit 1
cat "${BATS_TEST_DIRNAME}/fixtures/hosts" > "${_HOSTS_TEMP_PATH}"
export HOSTS_PATH="${_HOSTS_TEMP_PATH}"
# Use empty `hosts` script in environment to avoid depending on `hosts`
# being available in `$PATH`.
export PATH="${BATS_TEST_DIRNAME}/fixtures/bin:${PATH}"
}
teardown() {
@ -35,7 +24,7 @@ teardown() {
[[ -e "${_HOSTS_TEMP_PATH}" ]] &&
[[ "${_HOSTS_TEMP_PATH}" =~ ^/tmp/hosts_test ]]
then
rm -f "${_HOSTS_TEMP_DIR}"/hosts_test.*
rm "${_HOSTS_TEMP_PATH}"
fi
}

View File

@ -2,7 +2,7 @@
load test_helper
# `hosts unblock` #############################################################
# `hosts unblock` #################################################################
@test "\`unblock\` with no arguments exits with status 1." {
run "${_HOSTS}" unblock
@ -25,10 +25,10 @@ load test_helper
printf "\${status}: %s\\n" "${status}"
printf "\${output}: '%s'\\n" "${output}"
[[ "${lines[0]}" == "Usage:" ]]
[[ "${lines[1]}" == " hosts unblock <hostname>..." ]]
[[ "${lines[1]}" == " hosts unblock <hostname>" ]]
}
# `hosts unblock <invalid>` ###################################################
# `hosts unblock <invalid>` ############################################
@test "\`unblock <invalid> \` exits with status 1." {
{
@ -49,10 +49,10 @@ load test_helper
run "${_HOSTS}" unblock example.net
printf "\${status}: %s\\n" "${status}"
printf "\${output}: '%s'\\n" "${output}"
[[ ${output} == "${_ERROR_PREFIX}No matching entries found." ]]
[[ ${output} == "No matching records found." ]]
}
# `hosts unblock <hostname>` ##################################################
# `hosts unblock <hostname>` ###########################################
@test "\`unblock <hostname>\` exits with status 0." {
{
@ -133,99 +133,6 @@ Removed:
[[ "${output}" == "${_expected}" ]]
}
# `hosts unblock <hostname> <hostname2>` ######################################
@test "\`unblock <hostname> <hostname2>\` exits with status 0." {
{
run "${_HOSTS}" add 0.0.0.0 example.com
run "${_HOSTS}" block example.com
run "${_HOSTS}" block example2.com
run "${_HOSTS}" add 127.0.0.1 example.net
}
run "${_HOSTS}" unblock example.com example2.com
printf "\${status}: %s\\n" "${status}"
printf "\${output}: '%s'\\n" "${output}"
[[ ${status} -eq 0 ]]
}
@test "\`unblock <hostname> <hostname2>\` updates the hosts file." {
{
run "${_HOSTS}" add 0.0.0.0 example.com
run "${_HOSTS}" block example.com
run "${_HOSTS}" block example2.com
run "${_HOSTS}" add 127.0.0.1 example.net
}
_original="$(cat "${HOSTS_PATH}")"
run "${_HOSTS}" unblock example.com example2.com
printf "\${status}: %s\\n" "${status}"
printf "\${output}: '%s'\\n" "${output}"
_compare "${_original}" "$(cat "${HOSTS_PATH}")"
[[ "$(sed -n '11p' "${HOSTS_PATH}")" == "0.0.0.0 example.com" ]]
[[ "$(sed -n '12p' "${HOSTS_PATH}")" == "127.0.0.1 example.net" ]]
[[ "$(sed -n '13p' "${HOSTS_PATH}")" == "" ]]
}
@test "\`unblock <hostname> <hostname2>\` removes all matches." {
{
run "${_HOSTS}" add 0.0.0.0 example.com
run "${_HOSTS}" block example.com
run "${_HOSTS}" block example2.com
run "${_HOSTS}" add 127.0.0.1 example.net
}
_original="$(cat "${HOSTS_PATH}")"
run "${_HOSTS}" unblock example.com example2.com
printf "\${status}: %s\\n" "${status}"
printf "\${output}: '%s'\\n" "${output}"
_expected="\
##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting. Do not change this entry.
##
127.0.0.1 localhost
255.255.255.255 broadcasthost
::1 localhost
fe80::1%lo0 localhost
0.0.0.0 example.com
127.0.0.1 example.net"
_compare "'${_expected}'" "'$(cat "${HOSTS_PATH}")'"
[[ "$(cat "${HOSTS_PATH}")" != "${_original}" ]]
[[ "$(cat "${HOSTS_PATH}")" == "${_expected}" ]]
}
@test "\`unblock <hostname> <hostname2>\` prints feedback." {
{
run "${_HOSTS}" add 0.0.0.0 example.com
run "${_HOSTS}" block example.com
run "${_HOSTS}" block example2.com
run "${_HOSTS}" add 127.0.0.1 example.net
}
run "${_HOSTS}" unblock example.com example2.com
printf "\${status}: %s\\n" "${status}"
printf "\${output}: '%s'\\n" "${output}"
_expected="\
Removed:
127.0.0.1 example.com
Removed:
fe80::1%lo0 example.com
Removed:
::1 example.com
Removed:
127.0.0.1 example2.com
Removed:
fe80::1%lo0 example2.com
Removed:
::1 example2.com"
_compare "'${output}'" "'${_expected}'"
diff <(echo "${output}" ) <(echo "${_expected}")
[[ "${output}" == "${_expected}" ]]
}
# help ########################################################################
@test "\`help unblock\` exits with status 0." {
@ -238,5 +145,5 @@ Removed:
printf "\${status}: %s\\n" "${status}"
printf "\${output}: '%s'\\n" "${output}"
[[ "${lines[0]}" == "Usage:" ]]
[[ "${lines[1]}" == " hosts unblock <hostname>..." ]]
[[ "${lines[1]}" == " hosts unblock <hostname>" ]]
}

View File

@ -10,7 +10,7 @@ load test_helper
@test "\`hosts version\` prints a version number." {
run "${_HOSTS}" version
printf "'%s'" "${output}"
echo "${output}" | grep -q '[[:digit:]]\+\.[[:digit:]]\+\.[[:digit:]]\+'
echo "${output}" | grep -q '\d\+\.\d\+\.\d\+'
}
@test "\`hosts --version\` returns with 0 status." {
@ -21,7 +21,7 @@ load test_helper
@test "\`hosts --version\` prints a version number." {
run "${_HOSTS}" --version
printf "'%s'" "${output}"
echo "${output}" | grep -q '[[:digit:]]\+\.[[:digit:]]\+\.[[:digit:]]\+'
echo "${output}" | grep -q '\d\+\.\d\+\.\d\+'
}
# help ########################################################################