Page Menu
Home
Software Heritage
Search
Configure Global Search
Log In
Files
F8393799
test.sh
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
4 KB
Subscribers
None
test.sh
View Options
#!/usr/bin/env bash
set
-e
source
"
$(
dirname
$0
)
/install/_lib.sh"
echo
"
${
_group
}
Setting up variables and helpers ..."
export
SENTRY_TEST_HOST
=
"
${
SENTRY_TEST_HOST
:-
http
://localhost:
9000
}
"
TEST_USER
=
'test@example.com'
TEST_PASS
=
'test123TEST'
COOKIE_FILE
=
$(
mktemp
)
# Courtesy of https://stackoverflow.com/a/2183063/90297
trap_with_arg
()
{
func
=
"
$1
"
;
shift
for
sig
;
do
trap
"
$func
$sig
"
'$LINENO'
"
$sig
"
done
}
DID_CLEAN_UP
=
0
# the cleanup function will be the exit point
cleanup
()
{
if
[
"
$DID_CLEAN_UP
"
-eq
1
]
;
then
return
0
;
fi
DID_CLEAN_UP
=
1
if
[
"
$1
"
!
=
"EXIT"
]
;
then
echo
"An error occurred, caught SIG
$1
on line
$2
"
;
fi
echo
"Cleaning up..."
rm
$COOKIE_FILE
echo
"Done."
}
trap_with_arg
cleanup
ERR
INT
TERM
EXIT
echo
"
${
_endgroup
}
"
echo
"
${
_group
}
Starting Sentry for tests ..."
# Disable beacon for e2e tests
echo
'SENTRY_BEACON=False'
>>
$SENTRY_CONFIG_PY
$dcr
web
createuser
--superuser
--email
$TEST_USER
--password
$TEST_PASS
||
true
$dc
up
-d
printf
"Waiting for Sentry to be up"
;
timeout
60
bash
-c
'until $(curl -Isf -o /dev/null $SENTRY_TEST_HOST); do printf '
.
'; sleep 0.5; done'
echo
"
${
_endgroup
}
"
echo
"
${
_group
}
Running tests ..."
get_csrf_token
()
{
awk
'$6 == "sc" { print $7 }'
$COOKIE_FILE
;
}
sentry_api_request
()
{
curl
-s
-H
'Accept: application/json; charset=utf-8'
-H
"Referer:
$SENTRY_TEST_HOST
"
-H
'Content-Type: application/json'
-H
"X-CSRFToken:
$(
get_csrf_token
)
"
-b
"
$COOKIE_FILE
"
-c
"
$COOKIE_FILE
"
"
$SENTRY_TEST_HOST
/api/0/
$1
"
${
@:
2
}
;
}
login
()
{
INITIAL_AUTH_REDIRECT
=
$(
curl
-sL
-o
/dev/null
$SENTRY_TEST_HOST
-w
%
{
url_effective
}
)
if
[
"
$INITIAL_AUTH_REDIRECT
"
!
=
"
$SENTRY_TEST_HOST
/auth/login/sentry/"
]
;
then
echo
"Initial /auth/login/ redirect failed, exiting..."
echo
"
$INITIAL_AUTH_REDIRECT
"
exit
-1
fi
CSRF_TOKEN_FOR_LOGIN
=
$(
curl
$SENTRY_TEST_HOST
-sL
-c
"
$COOKIE_FILE
"
|
awk
-F
"'"
'
/csrfmiddlewaretoken/ {
print $4 "=" $6;
exit;
}'
)
curl
-sL
--data-urlencode
'op=login'
--data-urlencode
"username=
$TEST_USER
"
--data-urlencode
"password=
$TEST_PASS
"
--data-urlencode
"
$CSRF_TOKEN_FOR_LOGIN
"
"
$SENTRY_TEST_HOST
/auth/login/sentry/"
-H
"Referer:
$SENTRY_TEST_HOST
/auth/login/sentry/"
-b
"
$COOKIE_FILE
"
-c
"
$COOKIE_FILE
"
;
}
LOGIN_RESPONSE
=
$(
login
)
;
declare
-a
LOGIN_TEST_STRINGS
=(
'"isAuthenticated":true'
'"username":"test@example.com"'
'"isSuperuser":true'
)
for
i
in
"
${
LOGIN_TEST_STRINGS
[@]
}
"
do
echo
"Testing '
$i
'..."
echo
"
$LOGIN_RESPONSE
"
|
grep
"
$i
[,}]"
>
&
/dev/null
echo
"Pass."
done
echo
"
${
_endgroup
}
"
echo
"
${
_group
}
Running moar tests !!!"
# Set up initial/required settings (InstallWizard request)
sentry_api_request
"internal/options/?query=is:required"
-X
PUT
--data
'{"mail.use-tls":false,"mail.username":"","mail.port":25,"system.admin-email":"ben@byk.im","mail.password":"","mail.from":"root@localhost","system.url-prefix":"'
"
$SENTRY_TEST_HOST
"
'","auth.allow-registration":false,"beacon.anonymous":true}'
>
/dev/null
SENTRY_DSN
=
$(
sentry_api_request
"projects/sentry/internal/keys/"
|
awk
'BEGIN { RS=",|:{\n"; FS="\""; } $2 == "public" && $4 ~ "^http" { print $4; exit; }'
)
# We ignore the protocol and the host as we already know those
DSN_PIECES
=(
`
echo
$SENTRY_DSN
|
sed
-ne
's|^https\?://\([0-9a-z]\+\)@[^/]\+/\([0-9]\+\)$|\1\n\2|p'
`
)
SENTRY_KEY
=
${
DSN_PIECES
[0]
}
PROJECT_ID
=
${
DSN_PIECES
[1]
}
TEST_EVENT_ID
=
$(
export
LC_ALL
=
C
;
head
/dev/urandom
|
tr
-dc
"a-f0-9"
|
head
-c
32
)
# Thanks @untitaker - https://forum.sentry.io/t/how-can-i-post-with-curl-a-sentry-event-which-authentication-credentials/4759/2?u=byk
echo
"Creating test event..."
curl
-sf
--data
'{"event_id": "'
"
$TEST_EVENT_ID
"
'","level":"error","message":"a failure","extra":{"object":"42"}}'
-H
'Content-Type: application/json'
-H
"X-Sentry-Auth: Sentry sentry_version=7, sentry_key=
$SENTRY_KEY
, sentry_client=test-bash/0.1"
"
$SENTRY_TEST_HOST
/api/
$PROJECT_ID
/store/"
-o
/dev/null
EVENT_PATH
=
"projects/sentry/internal/events/
$TEST_EVENT_ID
/"
export
-f
sentry_api_request
get_csrf_token
export
SENTRY_TEST_HOST
COOKIE_FILE
EVENT_PATH
printf
"Getting the test event back"
timeout
30
bash
-c
'until $(sentry_api_request "$EVENT_PATH" -Isf -X GET -o /dev/null); do printf '
.
'; sleep 0.5; done'
echo
""
;
EVENT_RESPONSE
=
$(
sentry_api_request
"
$EVENT_PATH
"
)
declare
-a
EVENT_TEST_STRINGS
=(
'"eventID":"'
"
$TEST_EVENT_ID
"
'"'
'"message":"a failure"'
'"title":"a failure"'
'"object":"42"'
)
for
i
in
"
${
EVENT_TEST_STRINGS
[@]
}
"
do
echo
"Testing '
$i
'..."
echo
"
$EVENT_RESPONSE
"
|
grep
"
$i
[,}]"
>
&
/dev/null
echo
"Pass."
done
echo
"
${
_endgroup
}
"
echo
"
${
_group
}
Ensure cleanup crons are working ..."
$dc
ps
|
grep
-q
--
"-cleanup_.\+[[:space:]]\+Up[[:space:]]\+"
echo
"
${
_endgroup
}
"
File Metadata
Details
Attached
Mime Type
text/x-shellscript
Expires
Jun 4 2025, 7:17 PM (10 w, 21 h ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
3249454
Attached To
R206 getsentry-onpremise
Event Timeline
Log In to Comment