#!/bin/bash
# Descripcion: Crea un test no destructivo de la libreria Disk.lib conficurandolo
#	para un cliente concreto.
# 	Se ejecuta en el servidor y el test creado se utiliza en el cliente
#	Los datos los toma de la base de administración. 
# Uso: creaTestDisk1 NombreCliente
#
# Falta: la bd no tiene información de las particiones lógicas (el script sí esta preparado para ellas)
#	la bd no tiene datos del tamaño del disco


# Variables.
PROG=$(basename $0)
OPENGNSYS=${OPENGNSYS:-"/opt/opengnsys"}
SERVERCONF=$OPENGNSYS/etc/ogAdmServer.cfg
TESTDIR="$OPENGNSYS/client/lib/engine/tests/NoModify"
TESTFILE="$TESTDIR/Disk1-$1.shtest "
# Control básico de errores.
if [ $# -ne 1 ]; then
        echo "$PROG: Error de ejecución"
        echo "Formato: $PROG NOMBRE_PC"
        exit 1
fi

# Obtener datos de acceso a la Base de datos.
source $SERVERCONF

# Comprobar si se recibe nombre de aula o de equipo.
PARTICIONES=$(mysql -u "$USUARIO" -p"$PASSWORD" -D "$CATALOG" -N -e \
   "SELECT ordenadores_particiones.numpar, tipospar.tipopar, ordenadores_particiones.tamano 
	FROM tipospar INNER JOIN ordenadores_particiones INNER JOIN ordenadores 
	WHERE tipospar.codpar=ordenadores_particiones.codpar 
	AND ordenadores.idordenador=ordenadores_particiones.idordenador 
	AND nombreordenador='$1' 
	ORDER By ordenadores_particiones.numpar;")
# Si la cadena esta vacia, error
if [ -z "$PARTICIONES" ]; then
	echo "El equipo $1 no existe en la base de datos"
	exit 2
fi

# Ejemplo para añadir partitiones lógicas
#PARTICIONES="$PARTICIONES 5 LINUX-SWAP 1999999"
PRI=$( echo ${PARTICIONES%%\ 5\ *}|awk '{print $2"_"$3" "$5"_"$6" "$8"_"$9" "$11"_"$12}' |sed s/\ _//g |sed s/\ //g)

if $(echo $PARTICIONES |grep " 5 " >/dev/null); then
   LOG=$( echo ${PARTICIONES##*\ 5\ }|awk '{print $1"_"$2" "$4"_"$5" "$7"_"$8" "$10"_"$11" "}' |sed s/\ _//g |sed s/\ //g)
else
   LOG=""
fi
AUX=$(echo  $PARTICIONES| wc -w)
let NUMPART=AUX/3
P1SIZE=$(echo $PARTICIONES|cut -d\  -f3)
P1TYPE=$(echo $PARTICIONES|cut -d\  -f2)
case "$P1TYPE" in
    EMPTY)      P1ID=0  ;;
    FAT12)      P1ID=1  ;;
    EXTENDED)   P1ID=5  ;;
    FAT16)      P1ID=6  ;;
    NTFS|EXFAT) P1ID=7  ;;
    FAT32)      P1ID=b  ;;
    HFAT12)     P1ID=11 ;;
    HFAT16)     P1ID=16 ;;
    HNTFS)      P1ID=17 ;;
    HFAT32)     P1ID=1b ;;
    LINUX-SWAP) P1ID=82 ;;
    EXT[234]|REISERFS|REISER4|XFS|JFS)
                P1ID=83 ;;
    LINUX-LVM)  P1ID=8e ;;
    SOLARIS)    P1ID=bf ;;
    CACHE)      P1ID=ca ;;
    LINUX-RAP1ID) P1ID=fd ;;
    *)          P1ID="" ;;
esac

cat > $TESTFILE << EOF
Ejemplo de test funciones de particionado no destrutivo
=======================================================

# Desmontamos antes de empezar 
$ ogUnmountAll 1 2>/dev/null

$ ogUnmountCache 2>/dev/null

# Cambio de formato

$ ogDevToDisk /dev/sda
1 

$ ogDevToDisk /dev/sda1
1 1

$ ogDiskToDev
/dev/sda

$ ogDiskToDev 1
/dev/sda

$ ogDiskToDev 1 1
/dev/sda1

$ ogTypeToId NTFS
7

$ ogTypeToId LINUX
83

$ ogTypeToId LINUX GPT
8300


# Tamaño de disco  (cuando haya informacion en la base de datos)

#$ ogGetDiskSize 1
#312571224

# Tamaño de la particion

$ ogGetPartitionSize 1 1
$P1SIZE

# Información de  las particiones
$ ogListPartitions 1 | tr : _ | sed s/EXT[234]/LINUX/g | sed s/\ //g
$PRI$LOG
$ ogListPrimaryPartitions 1 | tr : _ | sed s/EXT[234]/LINUX/g | sed s/\ //g
$PRI

$ ogListLogicalPartitions 1 | tr : _ | sed s/EXT[234]/LINUX/g
$LOG

$ ogGetPartitionsNumber
$NUMPART

# Partición activa

$ ogSetPartitionActive 1 2 >/dev/null
$ ogGetPartitionActive 1
2

$ ogSetPartitionActive 1 1 >/dev/null
$ ogGetPartitionActive 1
1


# Tipo de particiones

$ ogGetPartitionId 1 1 
$P1ID


# Montamos la cache al final
$ ogMountCache >/dev/null 2>&1


EOF



echo "Test creado en $TESTFILE"
echo "Las particiones logicas hay que incluirlas a mano, porque no hay información de las mismas en la base de datos."
