
*** Settings ***
Library         SSHLibrary
Library         Process
Library         String
Resource        linux_services.resource

*** Variables ***
${Rascsi_Host}      rascsi.local
${Rascsi_Username}  pi
${Rascsi_Password}  raspberry


*** Keywords ***
Open Connection to Rascsi and Log In
    Open Connection  ${Rascsi_Host}
    Login  ${Rascsi_Username}  ${Rascsi_Password}

Create Blank Rascsi Drive Image of Size ${drive_size} megabytes named ${file_name}
    [Documentation]  Creates an empty drive image on the Rascsi host of the specified size and file name
    Execute Command  dd if=/dev/zero of=/home/pi/images/${file_name} bs=1M count=${drive_size}

Delete drive image ${file_name}
    [Documentation]  Delete a disk drive image that was created on the raspberry pi
    Remove File  /home/pi/images/${file_name}

Delete all RaSCSI drive images
    [Documentation]  Delete all of the temporary drive images that were created on the RaSCSI host
    Remove File  /home/pi/images/tmp_*

Drive image ${drive_image_file} is attached as SCSI ID ${scsi_id}
    [Documentation]  Attaches an existing drive image to the RaSCSI
    ${rasctl_output}=  Execute Command  rasctl -i ${scsi_id} -c attach -f /home/pi/images/${drive_image_file}
    log  ${rasctl_output}
    ${rasctl_output}=  Execute Command  rasctl -l
    log  ${rasctl_output}
    Rescan SCSI Bus

CD-ROM drive is attached as SCSI ID ${scsi_id}
    [Documentation]  Attaches a CD-ROM device (without any media) to the RaSCSI
    ${rasctl_output}=  Execute Command  rasctl -i ${scsi_id} -c attach -t cd
    log  ${rasctl_output}
    ${rasctl_output}=  Execute Command  rasctl -l
    log  ${rasctl_output}
    Rescan SCSI Bus

Magneto Optical drive is attached as SCSI ID ${scsi_id}
    [Documentation]  Attaches a Magneto Optical device (without any media) to the RaSCSI
    Execute Command  rasctl -i ${scsi_id} -c attach -t mo
    ${rasctl_output}=  Execute Command  rasctl -l
    log  ${rasctl_output}
    Rescan SCSI Bus


Detach all RaSCSI SCSI Devices
    [Documentation]  Send detach commands for all of the SCSI IDs to make sure that there
    ...              aren't any left over before/after a test
    FOR    ${scsi_id}    IN RANGE    0    7
        Detach RaSCSI SCSI ID ${scsi_id}
    END

Detach RaSCSI SCSI ID ${scsi_id:\d+}
    [Documentation]  Detaches the specified SCSI ID from Rascsi
    Execute Command  rasctl -c detach -i ${scsi_id}

Rasctl reports SCSI ID ${scsi_id} of type ${type:CD|MO|HD}
    [Documentation]  Executes rasctl and verifies that the drive is configured as the specified type
    ${rasctl_output}=  Execute Command  rasctl -l
    log  ${rasctl_output}
    Should Contain  ${rasctl_output}  |${SPACE*2}${scsi_id}${SPACE}|${SPACE*2}0${SPACE}|${SPACE}SC${type}${SPACE}|

# Create a ${iso_size} megabyte ISO named ${image_name} with random data
#     [Documentation]  Creates a file on the RaSCSI with random data (from /dev/urandom),
#     ...              then creates an ISO image with that data
#     Execute Command  mkdir /tmp/new_iso
#     Execute Command  dd if=/dev/urandom of=/tmp/new_iso/data.dat bs=1M count=${iso_size}
#     Execute Command  genisoimage -o /home/pi/images/${image_name} /tmp/new_iso/

Insert Removable Media ${image} into SCSI ID ${scsi_id}
    Execute Command  rasctl -c insert -i ${scsi_id} -f /home/pi/images/${image}
    ${result}=  Execute Command  rasctl -l
    Log  ${result}

Removable media ${image} is inserted into SCSI ID ${scsi_id:/d+}
    [Documentation]  Inserts the sepecified image name into the removable media drive
    Execute Command  rasctl -c insert -i ${scsi_id} -f /home/pi/images/${image}

# Insert removable media ${image_name} into SCSI ID ${scsi_id:/d+}
#     [Documentation]  Inserts the sepecified image name into the removable media drive
#     Execute Command  rasctl -c insert -i ${scsi_id} -f /home/pi/images/${image_name}

Eject removable media from SCSI ID ${scsi_id:/d+}
    [Documentation]  Inserts the sepecified image name into the removable media drive
    Execute Command  rasctl -c eject -i ${scsi_id}

Checksum of Random Data File from RaSCSI
    [Documentation]  Calcualte the SHA signature of the random data that was generated
    ...              on the RaSCSI host
    ${sha_output}=  Execute Command  sha512sum /tmp/new_iso/data.dat | cut -f 1
    Log  Checksum of the file was ${sha_output}
    [Return]  ${sha_output}

Get checksum of RaSCSI Image ${image_name}
    [Documentation]  Calculate the checksum of the disk image on the RaSCSI host
    ${checksum}=  Execute Command  md5sum /home/pi/images/${image_name} | cut -f 1 --delimiter=" "
    [Return]  ${checksum}

Get Size of RaSCSI Image ${image_name} in bytes
    [Documentation]  Return the size of the specified disk image in bytes
    ${size_output}=  Execute Command  du -b /home/pi/images/${image_name} | cut -f 1
    [Return]  ${size_output}


Get checksum of ${filename} from ISO ${image_name} on the RaSCSI Host
    [Documentation]  Extracts the specified file from the ISO, calculates the checksum
    ...              then returns that value
    ${temp_dirname}=  Generate Random String  10  [LETTERS]
    Execute Command  mkdir /tmp/${temp_dirname}  sudo=True  sudo_password=${Rascsi_Password}
    Execute Command  mount /home/pi/images/${image_name} /tmp/${temp_dirname}  sudo=True  sudo_password=${Rascsi_Password}
    ${checksum}=  Execute Command  md5sum /tmp/${temp_dirname}/${filename} | cut -f 1 --delimiter=" "
    Execute Command  umount /tmp/${temp_dirname}  sudo=True  sudo_password=${Rascsi_Password}
    Execute Command  rm -rf /tmp/${temp_dirname}  sudo=True  sudo_password=${Rascsi_Password}
    [Return]  ${checksum}

