Skip to content

Commit

Permalink
test(appsec): add integration tests for automated functions
Browse files Browse the repository at this point in the history
Signed-off-by: Alexandre Rulleau <[email protected]>
  • Loading branch information
Leiyks committed Jan 6, 2025
1 parent 7ae2b71 commit dcc3460
Show file tree
Hide file tree
Showing 4 changed files with 65 additions and 10 deletions.
17 changes: 7 additions & 10 deletions appsec/src/extension/tags.c
Original file line number Diff line number Diff line change
Expand Up @@ -961,7 +961,7 @@ static PHP_FUNCTION(datadog_appsec_track_user_signup_event_automated)
zend_string *anon_user_login = NULL;
zend_string *anon_user_id = NULL;
HashTable *metadata = NULL;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "S|Sh", &user_login, &user_id,
if (zend_parse_parameters(ZEND_NUM_ARGS(), "SS|h", &user_login, &user_id,
&metadata) == FAILURE) {
mlog(dd_log_warning, "Unexpected parameter combination, expected "
"(user_login, user_id, metadata)");
Expand Down Expand Up @@ -1102,7 +1102,7 @@ static PHP_FUNCTION(datadog_appsec_track_user_login_success_event_automated)
zend_string *anon_user_login = NULL;
zend_string *anon_user_id = NULL;
HashTable *metadata = NULL;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "S|Sh", &user_login, &user_id,
if (zend_parse_parameters(ZEND_NUM_ARGS(), "SS|h", &user_login, &user_id,
&metadata) == FAILURE) {
mlog(dd_log_warning, "Unexpected parameter combination, expected "
"(user_login, user_id, metadata)");
Expand Down Expand Up @@ -1147,6 +1147,8 @@ static PHP_FUNCTION(datadog_appsec_track_user_login_success_event_automated)
}

if (ZSTR_LEN(user_id) > 0) {
dd_find_and_apply_verdict_for_user(user_id);

// usr.id = <user_id>
_add_new_zstr_to_meta(meta_ht, _dd_tag_user_id, user_id, true, false);

Expand Down Expand Up @@ -1177,8 +1179,6 @@ static PHP_FUNCTION(datadog_appsec_track_user_login_success_event_automated)
meta_ht, _dd_login_success_event, _null_zstr, true, true);

dd_tags_set_sampling_priority();

dd_find_and_apply_verdict_for_user(user_id);
}

static PHP_FUNCTION(datadog_appsec_track_user_login_success_event)
Expand Down Expand Up @@ -1213,12 +1213,9 @@ static PHP_FUNCTION(datadog_appsec_track_user_login_success_event)
_user_event_triggered = true;
zend_array *meta_ht = Z_ARRVAL_P(meta);

if (ZSTR_LEN(user_id) > 0) {
dd_find_and_apply_verdict_for_user(user_id);
// usr.id = <user_id>
_add_new_zstr_to_meta(
meta_ht, _dd_tag_user_id, user_id, copy_user_id, true);
}
// usr.id = <user_id>
_add_new_zstr_to_meta(
meta_ht, _dd_tag_user_id, user_id, copy_user_id, true);

// _dd.appsec.events.users.login.success.sdk = true
_add_new_zstr_to_meta(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,24 @@ trait CommonTests {
assert span.meta."appsec.events.users.login.success.role" == 'admin'
}

@Test
void 'user login success event automated'() {
Trace trace = container.traceFromRequest('/user_login_success_automated.php') { HttpResponse<InputStream> resp ->
assert resp.statusCode() == 200
}

Span span = trace.first()
assert span.metrics._sampling_priority_v1 == 2.0d
assert span.meta."usr.id" == 'Admin'
assert span.meta."appsec.events.users.login.success.usr.login" == 'Login'
assert span.meta."_dd.appsec.usr.id" == 'Admin'
assert span.meta."_dd.appsec.usr.login" == 'Login'
assert span.meta."appsec.events.users.login.success.track" == 'true'
assert span.meta."appsec.events.users.login.success.email" == '[email protected]'
assert span.meta."appsec.events.users.login.success.session_id" == '987654321'
assert span.meta."appsec.events.users.login.success.role" == 'admin'
}

@Test
void 'user login failure event'() {
def trace = container.traceFromRequest('/user_login_failure.php') { HttpResponse<InputStream> resp ->
Expand All @@ -72,6 +90,24 @@ trait CommonTests {
assert span.meta."appsec.events.users.login.failure.role" == 'admin'
}

@Test
void 'user login failure event automated'() {
def trace = container.traceFromRequest('/user_login_failure_automated.php') { HttpResponse<InputStream> resp ->
assert resp.statusCode() == 200
}

Span span = trace.first()
assert span.metrics._sampling_priority_v1 == 2.0d
assert span.meta."appsec.events.users.login.failure.usr.id" == 'Admin'
assert span.meta."_dd.appsec.usr.id" == 'Admin'
assert span.meta."_dd.appsec.usr.login" == 'Login'
assert span.meta."appsec.events.users.login.failure.usr.login" == 'Login'
assert span.meta."appsec.events.users.login.failure.usr.exists" == 'false'
assert span.meta."appsec.events.users.login.failure.track" == 'true'
assert span.meta."appsec.events.users.login.failure.email" == '[email protected]'
assert span.meta."appsec.events.users.login.failure.session_id" == '987654321'
assert span.meta."appsec.events.users.login.failure.role" == 'admin'
}

@Test
void 'custom event'() {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<?php

\datadog\appsec\track_user_login_failure_event_automated('Login', 'Admin', false, [
'email' => '[email protected]',
'session_id' => '987654321',
'role' => 'admin'
]);

echo "Automated User Login Failure";
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<?php

\datadog\appsec\track_user_login_success_event_automated(
$_GET['login'] ?? 'Login',
$_GET['id'] ?? 'Admin',
[
'email' => '[email protected]',
'session_id' => '987654321',
'role' => 'admin'
]
);

echo "Automated User Login Success";

0 comments on commit dcc3460

Please sign in to comment.