#!/bin/bash -e

cd $AUTOPKGTEST_TMP

cat >cert.pem <<EOC
-----BEGIN CERTIFICATE-----
MIIFCTCCAvGgAwIBAgIUJGChzQ2judXJJ36GVw3gKe8GcWgwDQYJKoZIhvcNAQEL
BQAwFDESMBAGA1UEAwwJbG9jYWxob3N0MB4XDTIwMDEyNDE3NDYxNVoXDTIxMDEy
MzE3NDYxNVowFDESMBAGA1UEAwwJbG9jYWxob3N0MIICIjANBgkqhkiG9w0BAQEF
AAOCAg8AMIICCgKCAgEAwVRwb/rQFiLOZheuIQVe4KFa+q8cBrnQ2O05atJrl0tJ
VsAs/oOWBHI1GZKvFsgvhk4TEgrVR1jGdyJt8quCrY/rAlbwABD8DywVjJOSWBYC
YR19ikgLXKywd61qrCmfye4H2b7tKMdRYl+/iIHUsZ5j5ocbfAexsEg+72my7KHR
gz3UescomusF5n9pB1FZg151uzxYd+oUbFHn3I7Nz4ZNGjmHWBY2FsD9lFQMkwik
HZfGOmxuExiaWOYwAvxlj8eeOLeb55dZv0XJ4IXt4shIOr4v0lvPffh7nFjEmmO/
TRr09gyC1bmD9LAwTFbF/+iybIP5oqCffbfhctUPG2uhL7GHLe7HrX5CtpF7jJ3n
otTNH0Iz9I8i5HxiYr/utHiZisWLGm7aVTotm3TUQ/2eZo1qdW8dB5BguBvC4aUo
ybOoVS88NHko9AmGHve2digVOabAgN4hu5dY/tW2o2QvYQZc90HIXKfxm/FJYErH
tIyEJckFmfYYsw41vCBM0upfcChX1B/rI8BSCwP3C8iPj8iy8I3PAA4mv63z7XTh
KU2N+pjSlT30ljeFy5cqM2DXa9tp0RTHmHAwpAHZr9wowj+9pqmHZ3r1YMrvZnJg
7czM9G9lyluP4I7Dw9qD3y9FHaOucVOpf4slZAEzYl+m0HAe8Jna7mR1w2hOqXEC
AwEAAaNTMFEwHQYDVR0OBBYEFKe0oTF9NXS04C3jkt/JnJGdGwi6MB8GA1UdIwQY
MBaAFKe0oTF9NXS04C3jkt/JnJGdGwi6MA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZI
hvcNAQELBQADggIBAK6uL4o7adWe8Y0ev+iyET298gOpjZxrsDHxt708USm472VF
wxrJMkTJJNsV2QiNN0OQEfsbh/oACYAvG6l1d05M94vnD62svgcjJJT/GCrTcwEQ
GuSDihF54VO6OAKykqC3vje+aR8KTxSdm8NhYvYci86R/nlMHYSSdZdyTjsKxl50
Ogyw9leLCmQNadZqC9ZLf4Tszim65B64KKZAU6Hv/euJQWT1N/13fMYjeDen4rRi
icDNGAYlBTI4wEQlgkIntOS/NPK2Q3r0MEJzxdF7PduGMvWfN7kQ6j/zbZ5rV9LI
6eGg7UDLJvl+BYOwOBc46SHyKk2SzQ86JHpCfiXq1/bUvXy1uHz7Nb/FRBeHejdi
tDysAOhIVnEyELm7fs7N5QQYmBBbndtZunU1YbNWoxeKGHaoUEUZS7VvtG8pjUej
3/FkyrUw6KXBimtz4I+wK5ylkQJTZuN2xuqW7XEB3gor5BC1i+c86QZcl4+irv9M
qlEJJMQXIYdsnGOLD6WwJFndwG8hw18klu3CiZFiJ8krnVgVAbLQWGDyCkUeBcUZ
1JqmVlEftoDJdlAbKBqI3ynOW+DgJEsTZP4DX/HomMDIERK7kCX12awfhEokc0h+
sdIHrV5w0EJUWnckLjhIJZAHlYDHDKVD7WOPghX92SAqBsjV9xelXqHWNOIC
-----END CERTIFICATE-----
EOC

cat >key.pem <<EOK
-----BEGIN PRIVATE KEY-----
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
vUYXnEuAmC4f+iMq1TNQhh1aiOP/
-----END PRIVATE KEY-----
EOK

cat >sphinx.cfg <<EOS
[client]
verbose = False
address = 127.0.0.1
port = 2355
datadir = data
ssl_cert = cert.pem
timeout = 3
rwd_keys = True

[server]
verbose = True
address = 127.0.0.1
port=2355
timeout = 3
max_kids = 5
ssl_key= key.pem
ssl_cert= cert.pem
datadir = data
rl_decay=1800
rl_threshold=1
EOS

oracle >$AUTOPKGTEST_ARTIFACTS/oracle.log 2>&1 &
ORACLE_PID=$!
trap "kill $ORACLE_PID" ERR TERM QUIT INT

sphinx init

hash() {
   md5sum | { read md5 rest; echo $md5; }
}

echo "create user1"
rwd0="$(echo -n 'asdf' | sphinx create user1 example.com 2>/dev/null)"
echo "get user1 rwd"
rwd="$(echo -n 'asdf' | sphinx get user1 example.com)"
[[ "$rwd" == "$rwd0" ]] || false
echo "change user1 rwd"
rwd1="$(echo -ne 'asdf\nasdf' | sphinx change user1 example.com 2>/dev/null)"
echo "get user1 rwd"
rwd="$(echo -n 'asdf' | sphinx get user1 example.com)"
[[ "$rwd" == "$rwd0" ]] || false
echo "commit user1 changed rwd"
echo -n 'asdf' | sphinx commit user1 example.com
rwd="$(echo -n 'asdf' | sphinx get user1 example.com)"
[[ "$rwd" == "$rwd1" ]] || false
echo "undo user1"
echo -n 'asdf' | sphinx undo user1 example.com
rwd="$(echo -n 'asdf' | sphinx get user1 example.com)"
[[ "$rwd" == "$rwd0" ]] || false
echo "commit again user1 changed rwd"
echo -n 'asdf' | sphinx commit user1 example.com
rwd="$(echo -n 'asdf' | sphinx get user1 example.com)"
[[ "$rwd" == "$rwd1" ]] || false
rwd0="$rwd1"
echo "commit user1 changed rwd again - fail"
echo -n 'asdf' | sphinx commit user1 example.com 2>/dev/null && false || true
echo "get user1 rwd"
rwd="$(echo -n 'asdf' | sphinx get user1 example.com)"
[[ "$rwd" == "$rwd0" ]] || false

echo "create user2 rwd"
rwds0="$(echo -n 'asdf' | sphinx create user2 example.com ulsd 2>/dev/null)"
echo "get user2 rwd"
rwds="$(echo -n 'asdf' | sphinx get user2 example.com)"
[[ "$rwds" == "$rwds0" ]] || false
echo "list users rwd"
md5="$(echo -n 'asdf' | sphinx list example.com | hash)"
[[ "$md5" == "57c246efc4d56f6210462408b5f8ef2e" ]]
echo "delete user2 rwd"
echo -n 'asdf' | sphinx delete user2 example.com
echo "list users rwd"
md5="$(echo -n 'asdf' | sphinx list example.com | hash)"
[[ "$md5" == "a609316768619f154ef58db4d847b75e" ]]
echo "get user2 rwd - fail"
echo -n 'asdf' | sphinx get user2 example.com 2>/dev/null && false || true

echo "all tests passed"
kill $ORACLE_PID
