demo.sh

Download
bash 274 lines 6.2 KB
  1#!/usr/bin/env bash
  2set -euo pipefail
  3
  4# Demo script for logging and validation libraries
  5
  6# Get the directory where this script is located
  7SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
  8
  9# Source the libraries
 10source "$SCRIPT_DIR/lib/logging.sh"
 11source "$SCRIPT_DIR/lib/validation.sh"
 12
 13# Main demo
 14main() {
 15    log_section "Library Demo: Logging & Validation"
 16
 17    # --- Logging Demo ---
 18    log_section "Logging Demo"
 19
 20    log_info "This is an informational message"
 21    log_warn "This is a warning message"
 22    log_error "This is an error message"
 23    log_debug "This debug message won't show (default log level is INFO)"
 24
 25    echo
 26    log_info "Changing log level to DEBUG..."
 27    set_log_level DEBUG
 28
 29    log_debug "Now debug messages are visible!"
 30    log_info "Info still shows"
 31
 32    echo
 33    log_info "Enabling file logging..."
 34    local log_file="/tmp/demo.log"
 35    enable_file_logging "$log_file"
 36
 37    log_info "This message goes to both console and file"
 38    log_warn "Warnings are also logged to file"
 39
 40    echo
 41    log_info "Log file contents:"
 42    log_separator
 43    cat "$log_file"
 44    log_separator
 45
 46    disable_file_logging
 47    rm -f "$log_file"
 48
 49    # Reset to INFO level
 50    set_log_level INFO
 51
 52    echo
 53    log_section "Validation Demo"
 54
 55    # Email validation
 56    log_info "Testing email validation:"
 57    local -a emails=(
 58        "user@example.com"
 59        "invalid.email"
 60        "test@domain.co.uk"
 61        "@invalid.com"
 62    )
 63
 64    for email in "${emails[@]}"; do
 65        if validate_email "$email"; then
 66            log_info "  ✓ Valid email: $email"
 67        else
 68            log_warn "  ✗ Invalid email: $email"
 69        fi
 70    done
 71
 72    echo
 73    log_info "Testing IP address validation:"
 74    local -a ips=(
 75        "192.168.1.1"
 76        "256.1.1.1"
 77        "10.0.0.1"
 78        "invalid.ip"
 79    )
 80
 81    for ip in "${ips[@]}"; do
 82        if validate_ip "$ip"; then
 83            log_info "  ✓ Valid IP: $ip"
 84        else
 85            log_warn "  ✗ Invalid IP: $ip"
 86        fi
 87    done
 88
 89    echo
 90    log_info "Testing port validation:"
 91    local -a ports=(
 92        "80"
 93        "8080"
 94        "65536"
 95        "-1"
 96        "abc"
 97    )
 98
 99    for port in "${ports[@]}"; do
100        if validate_port "$port"; then
101            log_info "  ✓ Valid port: $port"
102        else
103            log_warn "  ✗ Invalid port: $port"
104        fi
105    done
106
107    echo
108    log_info "Testing integer checks:"
109    local -a numbers=(
110        "42"
111        "-10"
112        "0"
113        "3.14"
114        "abc"
115    )
116
117    for num in "${numbers[@]}"; do
118        local checks=""
119        is_integer "$num" && checks+="integer " || checks+="not-integer "
120        is_positive "$num" && checks+="positive " || true
121        is_non_negative "$num" && checks+="non-negative " || true
122
123        log_info "  $num: $checks"
124    done
125
126    echo
127    log_info "Testing range validation (0-100):"
128    local -a range_tests=(
129        "50"
130        "0"
131        "100"
132        "101"
133        "-1"
134    )
135
136    for num in "${range_tests[@]}"; do
137        if is_in_range "$num" 0 100; then
138            log_info "  ✓ $num is in range [0, 100]"
139        else
140            log_warn "  ✗ $num is out of range [0, 100]"
141        fi
142    done
143
144    echo
145    log_info "Testing URL validation:"
146    local -a urls=(
147        "https://www.example.com"
148        "http://localhost:8080/path"
149        "ftp://invalid.protocol"
150        "not a url"
151    )
152
153    for url in "${urls[@]}"; do
154        if validate_url "$url"; then
155            log_info "  ✓ Valid URL: $url"
156        else
157            log_warn "  ✗ Invalid URL: $url"
158        fi
159    done
160
161    echo
162    log_info "Testing hostname validation:"
163    local -a hostnames=(
164        "example.com"
165        "sub.domain.example.com"
166        "invalid..hostname"
167        "-invalid.com"
168    )
169
170    for hostname in "${hostnames[@]}"; do
171        if validate_hostname "$hostname"; then
172            log_info "  ✓ Valid hostname: $hostname"
173        else
174            log_warn "  ✗ Invalid hostname: $hostname"
175        fi
176    done
177
178    echo
179    log_info "Testing MAC address validation:"
180    local -a macs=(
181        "00:1A:2B:3C:4D:5E"
182        "00-1A-2B-3C-4D-5E"
183        "invalid:mac"
184        "00:1A:2B:3C:4D"
185    )
186
187    for mac in "${macs[@]}"; do
188        if validate_mac "$mac"; then
189            log_info "  ✓ Valid MAC: $mac"
190        else
191            log_warn "  ✗ Invalid MAC: $mac"
192        fi
193    done
194
195    echo
196    log_info "Testing semantic version validation:"
197    local -a versions=(
198        "1.2.3"
199        "2.0.0-beta"
200        "1.0.0+build.123"
201        "invalid.version"
202    )
203
204    for version in "${versions[@]}"; do
205        if validate_semver "$version"; then
206            log_info "  ✓ Valid semver: $version"
207        else
208            log_warn "  ✗ Invalid semver: $version"
209        fi
210    done
211
212    echo
213    log_info "Testing hex color validation:"
214    local -a colors=(
215        "#FF5733"
216        "#F57"
217        "FF5733"
218        "#GGGGGG"
219    )
220
221    for color in "${colors[@]}"; do
222        if validate_hex_color "$color"; then
223            log_info "  ✓ Valid hex color: $color"
224        else
225            log_warn "  ✗ Invalid hex color: $color"
226        fi
227    done
228
229    echo
230    log_info "Testing command existence:"
231    local -a commands=(
232        "bash"
233        "ls"
234        "nonexistent_command_xyz"
235    )
236
237    for cmd in "${commands[@]}"; do
238        if command_exists "$cmd"; then
239            log_info "  ✓ Command exists: $cmd"
240        else
241            log_warn "  ✗ Command not found: $cmd"
242        fi
243    done
244
245    echo
246    log_info "Testing path validation:"
247    local -a paths=(
248        "/tmp"
249        "/etc/passwd"
250        "/nonexistent/path"
251    )
252
253    for path in "${paths[@]}"; do
254        if validate_path "$path" "any"; then
255            if validate_path "$path" "dir"; then
256                log_info "  ✓ Directory exists: $path"
257            else
258                log_info "  ✓ File exists: $path"
259            fi
260        else
261            log_warn "  ✗ Path not found: $path"
262        fi
263    done
264
265    echo
266    log_section "Demo Complete"
267    log_info "Libraries are now loaded and ready to use"
268    log_info "Available logging functions: log_debug, log_info, log_warn, log_error"
269    log_info "Available validation functions: run 'declare -F | grep validate' to see all"
270}
271
272# Run the demo
273main "$@"