#!/bin/ksh # # CDDL HEADER START # # The contents of this file are subject to the terms of the # Common Development and Distribution License, Version 1.0 only # (the "License"). You may not use this file except in compliance # with the License. # # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE # or http://www.opensolaris.org/os/licensing. # See the License for the specific language governing permissions # and limitations under the License. # # When distributing Covered Code, include this CDDL HEADER in each # file and include the License file at usr/src/OPENSOLARIS.LICENSE. # If applicable, add the following below this CDDL HEADER, with the # fields enclosed by brackets "[]" replaced with your own identifying # information: Portions Copyright [yyyy] [name of copyright owner] # # CDDL HEADER END # # Copyright 2009 Sun Microsystems, Inc. All rights reserved. # Use is subject to license terms. #============================================================================ # Site Customization Variables Section #============================================================================ base_split_size=25 base_bucket="my-s3-crypto-test" base_lfile="/usr/dict/words" base_rfile="uploaded-mywords" base_nfile="files/downloaded-mywords" base_key_file="./my-s3-crypto-key-file" base_key_token="my-s3-crypto-key-token" base_cmd="${S3C_CRYPTO_CMD_NAME} -b ${base_bucket}" #============================================================================ # Global Variables and Functions #============================================================================ current_cmd="" export current_cmd debug() { if [ "${S3C_DEBUG}" = "1" ]; then echo ${*} fi } set_crypto_solaris() { current_cmd="${current_cmd} -p solaris" } enable_compression() { current_cmd="${current_cmd} -C" } enable_crypto() { current_cmd="${current_cmd} -c" } set_crypto_key_file() { current_cmd="${current_cmd} -k ${base_key_file}" } set_crypto_key_label() { current_cmd="${current_cmd} -K ${base_key_token}" } set_split_size() { current_cmd="${current_cmd} -L ${base_split_size}" } enable_split() { current_cmd="${current_cmd} -S" } set_put_content() { current_cmd="${current_cmd} -m put" } set_get_content() { current_cmd="${current_cmd} -m get" } set_base_cmd() { current_cmd="${base_cmd}" } set_lfile() { current_cmd="${current_cmd} -l ${1}" } set_rfile() { current_cmd="${current_cmd} -r ${1}" } set_send_test() { set_base_cmd set_put_content set_lfile "${base_lfile}" set_rfile "${base_rfile}" } set_stream_test() { set_base_cmd set_put_content set_lfile "-" set_rfile "${base_rfile}" } set_recv_test() { set_base_cmd set_get_content set_lfile "${base_nfile}" set_rfile "${base_rfile}" } perform_test() { debug "${current_cmd}" eval ${current_cmd} } create_bucket() { set_base_cmd current_cmd="${current_cmd} -m put" perform_test } clear_bucket() { set_base_cmd current_cmd="${current_cmd} -m rmrf" perform_test } list_bucket() { set_base_cmd current_cmd="${current_cmd} -m ls" debug `perform_test` } clear_local() { debug "rm -f ${base_nfile}" rm -f ${base_nfile} } list_local() { debug "ls ${base_nfile}" debug "`ls ${base_nfile}`" } compare_files() { echo "" if [ -f "${1}" -a -f "${2}" ]; then diff "${1}" "${2}" >/dev/null 2>&1 if [ $? -eq 0 ]; then echo "# PASS: Basic File Comparison" else echo "# FAIL: Basic File Comparison" diff "${1}" "${2}" fi count=`digest -a sha1 "${1}" "${2}" | awk '{ print $NF }' | sort -u | wc -l` if [ $count -eq 1 ]; then echo "# PASS: Cryptographic Digest Comparison" else echo "# FAIL: Cryptographic Digest Comparison" digest -a sha1 "${1}" "${2}" fi echo "" else echo "# FAIL: File Comprison - File not found ($1, $2)" fi } new_test() { echo "" echo "#" echo "# ${1}" echo "#" echo "" clear_bucket clear_local } # Actual Tests test_01() { new_test "Basic Compression Test" list_bucket set_send_test enable_compression perform_test list_bucket set_recv_test enable_compression perform_test list_local compare_files ${base_lfile} ${base_nfile} } test_02() { new_test "OpenSSL Passphrase Crypto Test" list_bucket set_send_test enable_crypto perform_test list_bucket set_recv_test enable_crypto perform_test list_local compare_files ${base_lfile} ${base_nfile} } test_03() { new_test "Solaris Passphrase Crypto Test" list_bucket set_send_test enable_crypto set_crypto_solaris perform_test list_bucket set_recv_test enable_crypto set_crypto_solaris perform_test list_local compare_files ${base_lfile} ${base_nfile} } test_04() { new_test "OpenSSL Key File Crypto Test" list_bucket set_send_test enable_crypto set_crypto_key_file perform_test list_bucket set_recv_test enable_crypto set_crypto_key_file perform_test list_local compare_files ${base_lfile} ${base_nfile} } test_05() { new_test "Solaris Key File Crypto Test" list_bucket set_send_test enable_crypto set_crypto_solaris set_crypto_key_file perform_test list_bucket set_recv_test enable_crypto set_crypto_solaris set_crypto_key_file perform_test list_local compare_files ${base_lfile} ${base_nfile} } test_06() { new_test "Key Label Crypto Test" list_bucket set_send_test enable_crypto set_crypto_solaris set_crypto_key_label perform_test list_bucket set_recv_test enable_crypto set_crypto_solaris set_crypto_key_label perform_test list_local compare_files ${base_lfile} ${base_nfile} } test_07() { new_test "Basic Splitting Test" list_bucket set_send_test enable_split perform_test list_bucket set_recv_test enable_split perform_test list_local compare_files ${base_lfile} ${base_nfile} } test_08() { new_test "New Limit Splitting Test" list_bucket set_send_test enable_split set_split_size perform_test list_bucket set_recv_test enable_split perform_test list_local compare_files ${base_lfile} ${base_nfile} } test_09() { new_test "Compression + Crypto Test" list_bucket set_send_test enable_compression enable_crypto set_crypto_key_file perform_test list_bucket set_recv_test enable_compression enable_crypto set_crypto_key_file perform_test list_local compare_files ${base_lfile} ${base_nfile} } test_10() { new_test "Compression + Split Test" list_bucket set_send_test enable_compression enable_split set_split_size perform_test list_bucket set_recv_test enable_compression enable_split set_split_size perform_test list_local compare_files ${base_lfile} ${base_nfile} } test_11() { new_test "Crypto + Split Test" list_bucket set_send_test enable_crypto set_crypto_key_file enable_split set_split_size perform_test list_bucket set_recv_test enable_crypto set_crypto_key_file enable_split set_split_size perform_test list_local compare_files ${base_lfile} ${base_nfile} } test_12() { new_test "Compression + Crypto + Split Test" list_bucket set_send_test enable_compression enable_crypto set_crypto_key_file enable_split set_split_size perform_test list_bucket set_recv_test enable_compression enable_crypto set_crypto_key_file enable_split set_split_size perform_test list_local compare_files ${base_lfile} ${base_nfile} } test_13() { new_test "Streaming Compression + Crypto + Split Test" list_bucket set_stream_test enable_compression enable_crypto set_crypto_key_file enable_split set_split_size cat ${base_lfile} | perform_test list_bucket set_recv_test enable_compression enable_crypto set_crypto_key_file enable_split set_split_size perform_test list_local compare_files ${base_lfile} ${base_nfile} } test_14() { new_test "Compression + Crypto + Split Test (Manual Verify)" list_bucket set_send_test enable_compression enable_crypto set_crypto_key_file enable_split set_split_size perform_test list_bucket set_recv_test enable_split set_split_size perform_test list_local debug "mv ${base_nfile} ${base_nfile}.tmp" mv ${base_nfile} ${base_nfile}.tmp debug "file ${base_nfile}.tmp" debug `file ${base_nfile}.tmp` debug "cat ${base_nfile}.tmp | openssl enc -d -aes-256-cbc -k ${base_key_file} > ${base_nfile}.bz2" cat ${base_nfile}.tmp | openssl enc -d -aes-256-cbc -k ${base_key_file} > ${base_nfile}.bz2 debug "file ${base_nfile}.bz2" debug `file ${base_nfile}.bz2` debug "bzip2 -d -c ${base_nfile}.bz2" bzip2 -d ${base_nfile}.bz2 debug "file ${base_nfile}" debug `file ${base_nfile}` list_local compare_files ${base_lfile} ${base_nfile} } #============================================================================ # Main Routine - Select tests to be run as appropriate #============================================================================ create_bucket list_bucket test_01 # Basic Compression Test test_02 # OpenSSL Passphrase Crypto Test test_03 # Solaris Passphrase Crypto Test test_04 # OpenSSL Key File Crypto Test test_05 # Solaris Key File Crypto Test test_06 # Solaris Key Label Crypto Test test_07 # Basic Splitting Test test_08 # New Limit Splitting Test test_09 # Compression + Crypto Test test_10 # Compression + Splitting Test test_11 # Crypto + Splitting Test test_12 # Compression + Crypto + Split Test test_13 # Streaming Compression + Crypto + Split Test test_14 # Compression + Crypto + Split Test (Manual Verify) clear_bucket list_bucket