Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add simple, manual test. #130

Closed

Conversation

Todd-L-Miller
Copy link
Contributor

I don't know enough about how the SciTokens [issuer] infrastructure is supposed to work to automate this.

it requires a valid scitoken for an uncached issuer.
test/asynch.cc Show resolved Hide resolved
test/asynch.cc Show resolved Hide resolved
Comment on lines +6 to +7
#include <string.h>

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[lint] reported by reviewdog 🐶

Suggested change
#include <string.h>

test/asynch.cc Outdated Show resolved Hide resolved
test/asynch.cc Outdated Show resolved Hide resolved
test/asynch.cc Outdated Show resolved Hide resolved
test/asynch.cc Outdated Show resolved Hide resolved
Comment on lines +108 to +112
fprintf( stderr, "Calling scitoken_deserialize_continue()...\n" );
rv = scitoken_deserialize_continue( & token, & status, & error );
if( rv != 0 ) {
fprintf( stderr, "scitoken_deserialize_continue() failed: %s\n", error );
exit( -3 );
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[lint] reported by reviewdog 🐶

Suggested change
fprintf( stderr, "Calling scitoken_deserialize_continue()...\n" );
rv = scitoken_deserialize_continue( & token, & status, & error );
if( rv != 0 ) {
fprintf( stderr, "scitoken_deserialize_continue() failed: %s\n", error );
exit( -3 );
fprintf(stderr, "Calling scitoken_deserialize_continue()...\n");
rv = scitoken_deserialize_continue(&token, &status, &error);
if (rv != 0) {
fprintf(stderr, "scitoken_deserialize_continue() failed: %s\n",
error);
exit(-3);

test/asynch.cc Outdated Show resolved Hide resolved
test/asynch.cc Outdated Show resolved Hide resolved
Todd-L-Miller and others added 3 commits September 15, 2023 11:17
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
@@ -0,0 +1,131 @@
#include <stdio.h>
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[lint] reported by reviewdog 🐶

Suggested change
#include <stdio.h>

@@ -0,0 +1,131 @@
#include <stdio.h>
#include <errno.h>
#include <stdlib.h>
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[lint] reported by reviewdog 🐶

Suggested change
#include <stdlib.h>
#include <stdio.h>
#include <stdlib.h>

#include <stdio.h>
#include <errno.h>
#include <stdlib.h>
#include <sys/select.h>
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[lint] reported by reviewdog 🐶

Suggested change
#include <sys/select.h>

#include <stdlib.h>
#include <sys/select.h>
#include <unistd.h>
#include <errno.h>
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[lint] reported by reviewdog 🐶

Suggested change
#include <errno.h>
#include <sys/select.h>
#include <unistd.h>

Comment on lines +7 to +8
#include <string.h>

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[lint] reported by reviewdog 🐶

Suggested change
#include <string.h>

fprintf( stderr, "scitoken_status_get_write_fd_set() failed: %s\n", error );
exit( -2 );
}

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[lint] reported by reviewdog 🐶

Suggested change
fprintf(stdout, "%s = %s\n", claim, value);
}

Comment on lines +86 to +90
fd_set * except_fds = NULL;
rv = scitoken_status_get_exc_fd_set( & status, & except_fds, & error );
if( rv != 0 ) {
fprintf( stderr, "scitoken_status_get_exc_fd_set() failed: %s\n", error );
exit( -2 );
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[lint] reported by reviewdog 🐶

Suggested change
fd_set * except_fds = NULL;
rv = scitoken_status_get_exc_fd_set( & status, & except_fds, & error );
if( rv != 0 ) {
fprintf( stderr, "scitoken_status_get_exc_fd_set() failed: %s\n", error );
exit( -2 );
int main(int argc, char **argv) {
if (argc < 2) {
usage(argv[0]);
exit(-1);

test/asynch.cc Outdated
Comment on lines 92 to 97

int max_fds;
rv = scitoken_status_get_max_fd( & status, & max_fds, & error );
if( rv != 0 ) {
fprintf( stderr, "scitoken_status_get_max_fds() failed: %s\n", error );
exit( -2 );
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[lint] reported by reviewdog 🐶

Suggested change
int max_fds;
rv = scitoken_status_get_max_fd( & status, & max_fds, & error );
if( rv != 0 ) {
fprintf( stderr, "scitoken_status_get_max_fds() failed: %s\n", error );
exit( -2 );
const char *encoded = argv[1];
int rv;
char *error;
SciToken token;
/*
// Synchronous.
rv = scitoken_deserialize( encoded, & token, NULL, & error );
if( rv != 0 ) {
fprintf( stderr, "scitoken_deserialize() failed: %s\n", error );
exit( -2 );
}
// scitoken_destroy( token );
*/
// The asynchronous API doesn't work like the synchronous API, and
// requires that deserialization profile be set before it starts
// working. This is probably a bug, but there's another bug where
// the default value for the profile causes a throw. *sigh*
// Asynchronous API.
SciTokenStatus status;
rv = scitoken_deserialize_start(encoded, &token, NULL, &status, &error);
if (rv != 0) {
fprintf(stderr, "scitoken_deserialize_start() failed: %s\n", error);
exit(-2);

test/asynch.cc Outdated
Comment on lines 99 to 106

struct timeval time_out{1, 0};
int s = select( max_fds + 1, read_fds, write_fds, except_fds, & time_out );
if( s == -1 ) {
fprintf( stderr, "select() failed: %s (%d)\n", strerror(errno), errno );
exit( -4 );
} else if( s == 0 ) {
fprintf( stderr, "select() timed out, checking for progress.\n" );
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[lint] reported by reviewdog 🐶

Suggested change
struct timeval time_out{1, 0};
int s = select( max_fds + 1, read_fds, write_fds, except_fds, & time_out );
if( s == -1 ) {
fprintf( stderr, "select() failed: %s (%d)\n", strerror(errno), errno );
exit( -4 );
} else if( s == 0 ) {
fprintf( stderr, "select() timed out, checking for progress.\n" );
if (status == NULL) {
fprintf(stderr, "scitoken_deserialize_start() returned a token\n");
exit(1);

test/asynch.cc Outdated
Comment on lines 109 to 131
fprintf( stderr, "Calling scitoken_deserialize_continue()...\n" );
rv = scitoken_deserialize_continue( & token, & status, & error );
if( rv != 0 ) {
fprintf( stderr, "scitoken_deserialize_continue() failed: %s\n", error );
exit( -3 );
}
} while( status != NULL );


print_claim(token, "ver");
print_claim(token, "aud");
print_claim(token, "iss");
// Not a string.
// print_claim(token, "exp");
// Not a string.
// print_claim(token, "iat");
// Not a string.
// print_claim(token, "nbf");
print_claim(token, "jti");

scitoken_destroy( token );
return 0;
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[lint] reported by reviewdog 🐶

Suggested change
fprintf( stderr, "Calling scitoken_deserialize_continue()...\n" );
rv = scitoken_deserialize_continue( & token, & status, & error );
if( rv != 0 ) {
fprintf( stderr, "scitoken_deserialize_continue() failed: %s\n", error );
exit( -3 );
}
} while( status != NULL );
print_claim(token, "ver");
print_claim(token, "aud");
print_claim(token, "iss");
// Not a string.
// print_claim(token, "exp");
// Not a string.
// print_claim(token, "iat");
// Not a string.
// print_claim(token, "nbf");
print_claim(token, "jti");
scitoken_destroy( token );
return 0;
}
do {
fd_set *read_fds = NULL;
rv = scitoken_status_get_read_fd_set(&status, &read_fds, &error);
if (rv != 0) {
fprintf(stderr,
"scitoken_status_get_read_fd_set() failed: %s\n",
error);
exit(-2);
}
fd_set *write_fds = NULL;
rv = scitoken_status_get_write_fd_set(&status, &write_fds, &error);
if (rv != 0) {
fprintf(stderr,
"scitoken_status_get_write_fd_set() failed: %s\n",
error);
exit(-2);
}
fd_set *except_fds = NULL;
rv = scitoken_status_get_exc_fd_set(&status, &except_fds, &error);
if (rv != 0) {
fprintf(stderr, "scitoken_status_get_exc_fd_set() failed: %s\n",
error);
exit(-2);
}
int max_fds;
rv = scitoken_status_get_max_fd(&status, &max_fds, &error);
if (rv != 0) {
fprintf(stderr, "scitoken_status_get_max_fds() failed: %s\n",
error);
exit(-2);
}
struct timeval time_out {
1, 0
};
int s =
select(max_fds + 1, read_fds, write_fds, except_fds, &time_out);
if (s == -1) {
fprintf(stderr, "select() failed: %s (%d)\n", strerror(errno),
errno);
exit(-4);
} else if (s == 0) {
fprintf(stderr, "select() timed out, checking for progress.\n");
}
fprintf(stderr, "Calling scitoken_deserialize_continue()...\n");
rv = scitoken_deserialize_continue(&token, &status, &error);
if (rv != 0) {
fprintf(stderr, "scitoken_deserialize_continue() failed: %s\n",
error);
exit(-3);
}
} while (status != NULL);
print_claim(token, "ver");
print_claim(token, "aud");
print_claim(token, "iss");
// Not a string.
// print_claim(token, "exp");
// Not a string.
// print_claim(token, "iat");
// Not a string.
// print_claim(token, "nbf");
print_claim(token, "jti");
scitoken_destroy(token);
return 0;
}

@@ -0,0 +1,132 @@
#include <stdio.h>
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[lint] reported by reviewdog 🐶

Suggested change
#include <stdio.h>

@@ -0,0 +1,132 @@
#include <stdio.h>
#include <errno.h>
#include <stdlib.h>
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[lint] reported by reviewdog 🐶

Suggested change
#include <stdlib.h>
#include <stdio.h>
#include <stdlib.h>

#include <stdio.h>
#include <errno.h>
#include <stdlib.h>
#include <sys/select.h>
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[lint] reported by reviewdog 🐶

Suggested change
#include <sys/select.h>

#include <stdlib.h>
#include <sys/select.h>
#include <string.h>
#include <unistd.h>
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[lint] reported by reviewdog 🐶

Suggested change
#include <unistd.h>
#include <sys/select.h>
#include <unistd.h>

Comment on lines +7 to +8
#include <errno.h>
#include <string.h>
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[lint] reported by reviewdog 🐶

Suggested change
#include <errno.h>
#include <string.h>

if( rv != 0 ) {
fprintf( stderr, "scitoken_status_get_write_fd_set() failed: %s\n", error );
exit( -2 );
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[lint] reported by reviewdog 🐶

Suggested change
}
fprintf(stdout, "%s = %s\n", claim, value);
}

Comment on lines +86 to +90

fd_set * except_fds = NULL;
rv = scitoken_status_get_exc_fd_set( & status, & except_fds, & error );
if( rv != 0 ) {
fprintf( stderr, "scitoken_status_get_exc_fd_set() failed: %s\n", error );
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[lint] reported by reviewdog 🐶

Suggested change
fd_set * except_fds = NULL;
rv = scitoken_status_get_exc_fd_set( & status, & except_fds, & error );
if( rv != 0 ) {
fprintf( stderr, "scitoken_status_get_exc_fd_set() failed: %s\n", error );
int main(int argc, char **argv) {
if (argc < 2) {
usage(argv[0]);
exit(-1);

test/asynch.cc Outdated
Comment on lines 92 to 97
}

int max_fds;
rv = scitoken_status_get_max_fd( & status, & max_fds, & error );
if( rv != 0 ) {
fprintf( stderr, "scitoken_status_get_max_fds() failed: %s\n", error );
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[lint] reported by reviewdog 🐶

Suggested change
}
int max_fds;
rv = scitoken_status_get_max_fd( & status, & max_fds, & error );
if( rv != 0 ) {
fprintf( stderr, "scitoken_status_get_max_fds() failed: %s\n", error );
const char *encoded = argv[1];
int rv;
char *error;
SciToken token;
/*
// Synchronous.
rv = scitoken_deserialize( encoded, & token, NULL, & error );
if( rv != 0 ) {
fprintf( stderr, "scitoken_deserialize() failed: %s\n", error );
exit( -2 );
}
// scitoken_destroy( token );
*/
// The asynchronous API doesn't work like the synchronous API, and
// requires that deserialization profile be set before it starts
// working. This is probably a bug, but there's another bug where
// the default value for the profile causes a throw. *sigh*
// Asynchronous API.
SciTokenStatus status;
rv = scitoken_deserialize_start(encoded, &token, NULL, &status, &error);
if (rv != 0) {
fprintf(stderr, "scitoken_deserialize_start() failed: %s\n", error);
exit(-2);

test/asynch.cc Outdated
Comment on lines 99 to 106
}

struct timeval time_out{1, 0};
int s = select( max_fds + 1, read_fds, write_fds, except_fds, & time_out );
if( s == -1 ) {
fprintf( stderr, "select() failed: %s (%d)\n", strerror(errno), errno );
exit( -4 );
} else if( s == 0 ) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[lint] reported by reviewdog 🐶

Suggested change
}
struct timeval time_out{1, 0};
int s = select( max_fds + 1, read_fds, write_fds, except_fds, & time_out );
if( s == -1 ) {
fprintf( stderr, "select() failed: %s (%d)\n", strerror(errno), errno );
exit( -4 );
} else if( s == 0 ) {
if (status == NULL) {
fprintf(stderr, "scitoken_deserialize_start() returned a token\n");
exit(1);

test/asynch.cc Outdated
Comment on lines 109 to 131

fprintf( stderr, "Calling scitoken_deserialize_continue()...\n" );
rv = scitoken_deserialize_continue( & token, & status, & error );
if( rv != 0 ) {
fprintf( stderr, "scitoken_deserialize_continue() failed: %s\n", error );
exit( -3 );
}
} while( status != NULL );


print_claim(token, "ver");
print_claim(token, "aud");
print_claim(token, "iss");
// Not a string.
// print_claim(token, "exp");
// Not a string.
// print_claim(token, "iat");
// Not a string.
// print_claim(token, "nbf");
print_claim(token, "jti");

scitoken_destroy( token );
return 0;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[lint] reported by reviewdog 🐶

Suggested change
fprintf( stderr, "Calling scitoken_deserialize_continue()...\n" );
rv = scitoken_deserialize_continue( & token, & status, & error );
if( rv != 0 ) {
fprintf( stderr, "scitoken_deserialize_continue() failed: %s\n", error );
exit( -3 );
}
} while( status != NULL );
print_claim(token, "ver");
print_claim(token, "aud");
print_claim(token, "iss");
// Not a string.
// print_claim(token, "exp");
// Not a string.
// print_claim(token, "iat");
// Not a string.
// print_claim(token, "nbf");
print_claim(token, "jti");
scitoken_destroy( token );
return 0;
do {
fd_set *read_fds = NULL;
rv = scitoken_status_get_read_fd_set(&status, &read_fds, &error);
if (rv != 0) {
fprintf(stderr,
"scitoken_status_get_read_fd_set() failed: %s\n",
error);
exit(-2);
}
fd_set *write_fds = NULL;
rv = scitoken_status_get_write_fd_set(&status, &write_fds, &error);
if (rv != 0) {
fprintf(stderr,
"scitoken_status_get_write_fd_set() failed: %s\n",
error);
exit(-2);
}
fd_set *except_fds = NULL;
rv = scitoken_status_get_exc_fd_set(&status, &except_fds, &error);
if (rv != 0) {
fprintf(stderr, "scitoken_status_get_exc_fd_set() failed: %s\n",
error);
exit(-2);
}
int max_fds;
rv = scitoken_status_get_max_fd(&status, &max_fds, &error);
if (rv != 0) {
fprintf(stderr, "scitoken_status_get_max_fds() failed: %s\n",
error);
exit(-2);
}
struct timeval time_out {
1, 0
};
int s =
select(max_fds + 1, read_fds, write_fds, except_fds, &time_out);
if (s == -1) {
fprintf(stderr, "select() failed: %s (%d)\n", strerror(errno),
errno);
exit(-4);
} else if (s == 0) {
fprintf(stderr, "select() timed out, checking for progress.\n");
}
fprintf(stderr, "Calling scitoken_deserialize_continue()...\n");
rv = scitoken_deserialize_continue(&token, &status, &error);
if (rv != 0) {
fprintf(stderr, "scitoken_deserialize_continue() failed: %s\n",
error);
exit(-3);
}
} while (status != NULL);
print_claim(token, "ver");
print_claim(token, "aud");
print_claim(token, "iss");
// Not a string.
// print_claim(token, "exp");
// Not a string.
// print_claim(token, "iat");
// Not a string.
// print_claim(token, "nbf");
print_claim(token, "jti");
scitoken_destroy(token);
return 0;
}

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Comment on lines +12 to +13
void
void usage(const char *self) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[lint] reported by reviewdog 🐶

Suggested change
void
void usage(const char *self) {
void void usage(const char *self) {

test/asynch.cc Outdated
Comment on lines 16 to 81
void
print_claim( SciToken & token, const char * claim ) {
char * value;
char * error;
int rv = scitoken_get_claim_string(
token, claim, & value, & error
);
if( rv != 0 ) {
fprintf( stderr, "scitoken_get_claim_string('%s') failed: %s\n", claim, error );
// exit( -2 );
return;
}
fprintf( stdout, "%s = %s\n", claim, value );
}


int
main( int argc, char ** argv) {
if( argc < 2 ) { usage(argv[0]); exit(-1); }
const char * encoded = argv[1];

int rv;
char * error;
SciToken token;

/*
// Synchronous.
rv = scitoken_deserialize( encoded, & token, NULL, & error );
if( rv != 0 ) {
fprintf( stderr, "scitoken_deserialize() failed: %s\n", error );
exit( -2 );
}
// scitoken_destroy( token );
*/

// The asynchronous API doesn't work like the synchronous API, and
// requires that deserialization profile be set before it starts
// working. This is probably a bug, but there's another bug where
// the default value for the profile causes a throw. *sigh*

// Asynchronous API.
SciTokenStatus status;
rv = scitoken_deserialize_start(
encoded, & token, NULL, & status, & error
);
if( rv != 0 ) {
fprintf( stderr, "scitoken_deserialize_start() failed: %s\n", error );
exit( -2 );
}
if( status == NULL ) {
fprintf( stderr, "scitoken_deserialize_start() returned a token\n" );
exit( 1 );
}


do {
fd_set * read_fds = NULL;
rv = scitoken_status_get_read_fd_set( & status, & read_fds, & error );
if( rv != 0 ) {
fprintf( stderr, "scitoken_status_get_read_fd_set() failed: %s\n", error );
exit( -2 );
}

fd_set * write_fds = NULL;
rv = scitoken_status_get_write_fd_set( & status, & write_fds, & error );
if( rv != 0 ) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[lint] reported by reviewdog 🐶

Suggested change
void
print_claim( SciToken & token, const char * claim ) {
char * value;
char * error;
int rv = scitoken_get_claim_string(
token, claim, & value, & error
);
if( rv != 0 ) {
fprintf( stderr, "scitoken_get_claim_string('%s') failed: %s\n", claim, error );
// exit( -2 );
return;
}
fprintf( stdout, "%s = %s\n", claim, value );
}
int
main( int argc, char ** argv) {
if( argc < 2 ) { usage(argv[0]); exit(-1); }
const char * encoded = argv[1];
int rv;
char * error;
SciToken token;
/*
// Synchronous.
rv = scitoken_deserialize( encoded, & token, NULL, & error );
if( rv != 0 ) {
fprintf( stderr, "scitoken_deserialize() failed: %s\n", error );
exit( -2 );
}
// scitoken_destroy( token );
*/
// The asynchronous API doesn't work like the synchronous API, and
// requires that deserialization profile be set before it starts
// working. This is probably a bug, but there's another bug where
// the default value for the profile causes a throw. *sigh*
// Asynchronous API.
SciTokenStatus status;
rv = scitoken_deserialize_start(
encoded, & token, NULL, & status, & error
);
if( rv != 0 ) {
fprintf( stderr, "scitoken_deserialize_start() failed: %s\n", error );
exit( -2 );
}
if( status == NULL ) {
fprintf( stderr, "scitoken_deserialize_start() returned a token\n" );
exit( 1 );
}
do {
fd_set * read_fds = NULL;
rv = scitoken_status_get_read_fd_set( & status, & read_fds, & error );
if( rv != 0 ) {
fprintf( stderr, "scitoken_status_get_read_fd_set() failed: %s\n", error );
exit( -2 );
}
fd_set * write_fds = NULL;
rv = scitoken_status_get_write_fd_set( & status, & write_fds, & error );
if( rv != 0 ) {
void void print_claim(SciToken & token, const char *claim) {
char *value;
char *error;
int rv = scitoken_get_claim_string(token, claim, &value, &error);
if (rv != 0) {
fprintf(stderr, "scitoken_get_claim_string('%s') failed: %s\n",
claim, error);
return;

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
test/asynch.cc Outdated
Comment on lines 16 to 81
void
void print_claim(SciToken &token, const char *claim) {
char *value;
char *error;
int rv = scitoken_get_claim_string(token, claim, &value, &error);
if (rv != 0) {
fprintf(stderr, "scitoken_get_claim_string('%s') failed: %s\n", claim,
error);
return;
}
fprintf( stdout, "%s = %s\n", claim, value );
}


int
main( int argc, char ** argv) {
if( argc < 2 ) { usage(argv[0]); exit(-1); }
const char * encoded = argv[1];

int rv;
char * error;
SciToken token;

/*
// Synchronous.
rv = scitoken_deserialize( encoded, & token, NULL, & error );
if( rv != 0 ) {
fprintf( stderr, "scitoken_deserialize() failed: %s\n", error );
exit( -2 );
}
// scitoken_destroy( token );
*/

// The asynchronous API doesn't work like the synchronous API, and
// requires that deserialization profile be set before it starts
// working. This is probably a bug, but there's another bug where
// the default value for the profile causes a throw. *sigh*

// Asynchronous API.
SciTokenStatus status;
rv = scitoken_deserialize_start(
encoded, & token, NULL, & status, & error
);
if( rv != 0 ) {
fprintf( stderr, "scitoken_deserialize_start() failed: %s\n", error );
exit( -2 );
}
if( status == NULL ) {
fprintf( stderr, "scitoken_deserialize_start() returned a token\n" );
exit( 1 );
}


do {
fd_set * read_fds = NULL;
rv = scitoken_status_get_read_fd_set( & status, & read_fds, & error );
if( rv != 0 ) {
fprintf( stderr, "scitoken_status_get_read_fd_set() failed: %s\n", error );
exit( -2 );
}

fd_set * write_fds = NULL;
rv = scitoken_status_get_write_fd_set( & status, & write_fds, & error );
if( rv != 0 ) {
fprintf( stderr, "scitoken_status_get_write_fd_set() failed: %s\n", error );
exit( -2 );
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[lint] reported by reviewdog 🐶

Suggested change
void
void print_claim(SciToken &token, const char *claim) {
char *value;
char *error;
int rv = scitoken_get_claim_string(token, claim, &value, &error);
if (rv != 0) {
fprintf(stderr, "scitoken_get_claim_string('%s') failed: %s\n", claim,
error);
return;
}
fprintf( stdout, "%s = %s\n", claim, value );
}
int
main( int argc, char ** argv) {
if( argc < 2 ) { usage(argv[0]); exit(-1); }
const char * encoded = argv[1];
int rv;
char * error;
SciToken token;
/*
// Synchronous.
rv = scitoken_deserialize( encoded, & token, NULL, & error );
if( rv != 0 ) {
fprintf( stderr, "scitoken_deserialize() failed: %s\n", error );
exit( -2 );
}
// scitoken_destroy( token );
*/
// The asynchronous API doesn't work like the synchronous API, and
// requires that deserialization profile be set before it starts
// working. This is probably a bug, but there's another bug where
// the default value for the profile causes a throw. *sigh*
// Asynchronous API.
SciTokenStatus status;
rv = scitoken_deserialize_start(
encoded, & token, NULL, & status, & error
);
if( rv != 0 ) {
fprintf( stderr, "scitoken_deserialize_start() failed: %s\n", error );
exit( -2 );
}
if( status == NULL ) {
fprintf( stderr, "scitoken_deserialize_start() returned a token\n" );
exit( 1 );
}
do {
fd_set * read_fds = NULL;
rv = scitoken_status_get_read_fd_set( & status, & read_fds, & error );
if( rv != 0 ) {
fprintf( stderr, "scitoken_status_get_read_fd_set() failed: %s\n", error );
exit( -2 );
}
fd_set * write_fds = NULL;
rv = scitoken_status_get_write_fd_set( & status, & write_fds, & error );
if( rv != 0 ) {
fprintf( stderr, "scitoken_status_get_write_fd_set() failed: %s\n", error );
exit( -2 );
void void print_claim(SciToken & token, const char *claim) {
char *value;
char *error;
int rv = scitoken_get_claim_string(token, claim, &value, &error);
if (rv != 0) {
fprintf(stderr, "scitoken_get_claim_string('%s') failed: %s\n",
claim, error);
return;

test/asynch.cc Outdated
Comment on lines 90 to 92

int max_fds;
rv = scitoken_status_get_max_fd( & status, & max_fds, & error );
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[lint] reported by reviewdog 🐶

Suggested change
int max_fds;
rv = scitoken_status_get_max_fd( & status, & max_fds, & error );
const char *encoded = argv[1];
int rv;
char *error;
SciToken token;
/*
// Synchronous.
rv = scitoken_deserialize( encoded, & token, NULL, & error );
if( rv != 0 ) {
fprintf( stderr, "scitoken_deserialize() failed: %s\n", error );
exit( -2 );
}
// scitoken_destroy( token );
*/
// The asynchronous API doesn't work like the synchronous API, and
// requires that deserialization profile be set before it starts
// working. This is probably a bug, but there's another bug where
// the default value for the profile causes a throw. *sigh*
// Asynchronous API.
SciTokenStatus status;
rv = scitoken_deserialize_start(encoded, &token, NULL, &status, &error);

test/asynch.cc Outdated
Comment on lines 94 to 95
fprintf( stderr, "scitoken_status_get_max_fds() failed: %s\n", error );
exit( -2 );
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[lint] reported by reviewdog 🐶

Suggested change
fprintf( stderr, "scitoken_status_get_max_fds() failed: %s\n", error );
exit( -2 );
fprintf(stderr, "scitoken_deserialize_start() failed: %s\n", error);

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Comment on lines +90 to +92

int max_fds;
rv = scitoken_status_get_max_fd(&status, &max_fds, &error);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[lint] reported by reviewdog 🐶

Suggested change
int max_fds;
rv = scitoken_status_get_max_fd(&status, &max_fds, &error);
const char *encoded = argv[1];
int rv;
char *error;
SciToken token;
/*
// Synchronous.
rv = scitoken_deserialize( encoded, & token, NULL, & error );
if( rv != 0 ) {
fprintf( stderr, "scitoken_deserialize() failed: %s\n", error );
exit( -2 );
}
// scitoken_destroy( token );
*/
// The asynchronous API doesn't work like the synchronous API, and
// requires that deserialization profile be set before it starts
// working. This is probably a bug, but there's another bug where
// the default value for the profile causes a throw. *sigh*
// Asynchronous API.
SciTokenStatus status;
rv = scitoken_deserialize_start(encoded, &token, NULL, &status, &error);

Comment on lines +94 to +95
fprintf(stderr, "scitoken_status_get_max_fds() failed: %s\n",
error);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[lint] reported by reviewdog 🐶

Suggested change
fprintf(stderr, "scitoken_status_get_max_fds() failed: %s\n",
error);
fprintf(stderr, "scitoken_deserialize_start() failed: %s\n", error);

test/asynch.cc Outdated
Comment on lines 98 to 108

struct timeval time_out{1, 0};
int s = select( max_fds + 1, read_fds, write_fds, except_fds, & time_out );
if( s == -1 ) {
fprintf( stderr, "select() failed: %s (%d)\n", strerror(errno), errno );
exit( -4 );
} else if( s == 0 ) {
fprintf( stderr, "select() timed out, checking for progress.\n" );
}

fprintf( stderr, "Calling scitoken_deserialize_continue()...\n" );
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[lint] reported by reviewdog 🐶

Suggested change
struct timeval time_out{1, 0};
int s = select( max_fds + 1, read_fds, write_fds, except_fds, & time_out );
if( s == -1 ) {
fprintf( stderr, "select() failed: %s (%d)\n", strerror(errno), errno );
exit( -4 );
} else if( s == 0 ) {
fprintf( stderr, "select() timed out, checking for progress.\n" );
}
fprintf( stderr, "Calling scitoken_deserialize_continue()...\n" );
if (status == NULL) {
fprintf(stderr, "scitoken_deserialize_start() returned a token\n");
exit(1);

Comment on lines +98 to +108

struct timeval time_out {
1, 0
};
int s = select(max_fds + 1, read_fds, write_fds, except_fds, &time_out);
if (s == -1) {
fprintf(stderr, "select() failed: %s (%d)\n", strerror(errno),
errno);
exit(-4);
} else if (s == 0) {
fprintf(stderr, "select() timed out, checking for progress.\n");
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[lint] reported by reviewdog 🐶

Suggested change
struct timeval time_out {
1, 0
};
int s = select(max_fds + 1, read_fds, write_fds, except_fds, &time_out);
if (s == -1) {
fprintf(stderr, "select() failed: %s (%d)\n", strerror(errno),
errno);
exit(-4);
} else if (s == 0) {
fprintf(stderr, "select() timed out, checking for progress.\n");
if (status == NULL) {
fprintf(stderr, "scitoken_deserialize_start() returned a token\n");
exit(1);

Todd-L-Miller and others added 3 commits September 15, 2023 11:19
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Comment on lines +16 to +82
void
void print_claim(SciToken &token, const char *claim) {
char *value;
char *error;
int rv = scitoken_get_claim_string(token, claim, &value, &error);
if (rv != 0) {
fprintf(stderr, "scitoken_get_claim_string('%s') failed: %s\n", claim,
error);
return;
}
fprintf( stdout, "%s = %s\n", claim, value );
}


int main(int argc, char **argv) {
if (argc < 2) {
usage(argv[0]);
exit(-1);
}
const char *encoded = argv[1];
int rv;
char * error;
SciToken token;

/*
// Synchronous.
rv = scitoken_deserialize( encoded, & token, NULL, & error );
if( rv != 0 ) {
fprintf( stderr, "scitoken_deserialize() failed: %s\n", error );
exit( -2 );
}
// scitoken_destroy( token );
*/

// The asynchronous API doesn't work like the synchronous API, and
// requires that deserialization profile be set before it starts
// working. This is probably a bug, but there's another bug where
// the default value for the profile causes a throw. *sigh*

// Asynchronous API.
SciTokenStatus status;
rv = scitoken_deserialize_start(
encoded, & token, NULL, & status, & error
);
if( rv != 0 ) {
fprintf( stderr, "scitoken_deserialize_start() failed: %s\n", error );
exit( -2 );
}
if( status == NULL ) {
fprintf( stderr, "scitoken_deserialize_start() returned a token\n" );
exit( 1 );
}


do {
fd_set * read_fds = NULL;
rv = scitoken_status_get_read_fd_set( & status, & read_fds, & error );
if( rv != 0 ) {
fprintf( stderr, "scitoken_status_get_read_fd_set() failed: %s\n", error );
exit( -2 );
}

fd_set * write_fds = NULL;
rv = scitoken_status_get_write_fd_set( & status, & write_fds, & error );
if( rv != 0 ) {
fprintf( stderr, "scitoken_status_get_write_fd_set() failed: %s\n", error );
exit( -2 );
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[lint] reported by reviewdog 🐶

Suggested change
void
void print_claim(SciToken &token, const char *claim) {
char *value;
char *error;
int rv = scitoken_get_claim_string(token, claim, &value, &error);
if (rv != 0) {
fprintf(stderr, "scitoken_get_claim_string('%s') failed: %s\n", claim,
error);
return;
}
fprintf( stdout, "%s = %s\n", claim, value );
}
int main(int argc, char **argv) {
if (argc < 2) {
usage(argv[0]);
exit(-1);
}
const char *encoded = argv[1];
int rv;
char * error;
SciToken token;
/*
// Synchronous.
rv = scitoken_deserialize( encoded, & token, NULL, & error );
if( rv != 0 ) {
fprintf( stderr, "scitoken_deserialize() failed: %s\n", error );
exit( -2 );
}
// scitoken_destroy( token );
*/
// The asynchronous API doesn't work like the synchronous API, and
// requires that deserialization profile be set before it starts
// working. This is probably a bug, but there's another bug where
// the default value for the profile causes a throw. *sigh*
// Asynchronous API.
SciTokenStatus status;
rv = scitoken_deserialize_start(
encoded, & token, NULL, & status, & error
);
if( rv != 0 ) {
fprintf( stderr, "scitoken_deserialize_start() failed: %s\n", error );
exit( -2 );
}
if( status == NULL ) {
fprintf( stderr, "scitoken_deserialize_start() returned a token\n" );
exit( 1 );
}
do {
fd_set * read_fds = NULL;
rv = scitoken_status_get_read_fd_set( & status, & read_fds, & error );
if( rv != 0 ) {
fprintf( stderr, "scitoken_status_get_read_fd_set() failed: %s\n", error );
exit( -2 );
}
fd_set * write_fds = NULL;
rv = scitoken_status_get_write_fd_set( & status, & write_fds, & error );
if( rv != 0 ) {
fprintf( stderr, "scitoken_status_get_write_fd_set() failed: %s\n", error );
exit( -2 );
void void print_claim(SciToken & token, const char *claim) {
char *value;
char *error;
int rv = scitoken_get_claim_string(token, claim, &value, &error);
if (rv != 0) {
fprintf(stderr, "scitoken_get_claim_string('%s') failed: %s\n",
claim, error);
return;

Comment on lines +91 to +93

int max_fds;
rv = scitoken_status_get_max_fd(&status, &max_fds, &error);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[lint] reported by reviewdog 🐶

Suggested change
int max_fds;
rv = scitoken_status_get_max_fd(&status, &max_fds, &error);
const char *encoded = argv[1];
int rv;
char *error;
SciToken token;
/*
// Synchronous.
rv = scitoken_deserialize( encoded, & token, NULL, & error );
if( rv != 0 ) {
fprintf( stderr, "scitoken_deserialize() failed: %s\n", error );
exit( -2 );
}
// scitoken_destroy( token );
*/
// The asynchronous API doesn't work like the synchronous API, and
// requires that deserialization profile be set before it starts
// working. This is probably a bug, but there's another bug where
// the default value for the profile causes a throw. *sigh*
// Asynchronous API.
SciTokenStatus status;
rv = scitoken_deserialize_start(encoded, &token, NULL, &status, &error);

test/asynch.cc Outdated
Comment on lines 112 to 133
fprintf( stderr, "Calling scitoken_deserialize_continue()...\n" );
rv = scitoken_deserialize_continue( & token, & status, & error );
if( rv != 0 ) {
fprintf( stderr, "scitoken_deserialize_continue() failed: %s\n", error );
exit( -3 );
}
} while( status != NULL );


print_claim(token, "ver");
print_claim(token, "aud");
print_claim(token, "iss");
// Not a string.
// print_claim(token, "exp");
// Not a string.
// print_claim(token, "iat");
// Not a string.
// print_claim(token, "nbf");
print_claim(token, "jti");

scitoken_destroy( token );
return 0;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[lint] reported by reviewdog 🐶

Suggested change
fprintf( stderr, "Calling scitoken_deserialize_continue()...\n" );
rv = scitoken_deserialize_continue( & token, & status, & error );
if( rv != 0 ) {
fprintf( stderr, "scitoken_deserialize_continue() failed: %s\n", error );
exit( -3 );
}
} while( status != NULL );
print_claim(token, "ver");
print_claim(token, "aud");
print_claim(token, "iss");
// Not a string.
// print_claim(token, "exp");
// Not a string.
// print_claim(token, "iat");
// Not a string.
// print_claim(token, "nbf");
print_claim(token, "jti");
scitoken_destroy( token );
return 0;
do {
fd_set *read_fds = NULL;
rv = scitoken_status_get_read_fd_set(&status, &read_fds, &error);
if (rv != 0) {
fprintf(stderr,
"scitoken_status_get_read_fd_set() failed: %s\n",
error);
exit(-2);
}
fd_set *write_fds = NULL;
rv = scitoken_status_get_write_fd_set(&status, &write_fds, &error);
if (rv != 0) {
fprintf(stderr,
"scitoken_status_get_write_fd_set() failed: %s\n",
error);
exit(-2);
}
fd_set *except_fds = NULL;
rv = scitoken_status_get_exc_fd_set(&status, &except_fds, &error);
if (rv != 0) {
fprintf(stderr, "scitoken_status_get_exc_fd_set() failed: %s\n",
error);
exit(-2);
}
int max_fds;
rv = scitoken_status_get_max_fd(&status, &max_fds, &error);
if (rv != 0) {
fprintf(stderr, "scitoken_status_get_max_fds() failed: %s\n",
error);
exit(-2);
}
struct timeval time_out {
1, 0
};
int s =
select(max_fds + 1, read_fds, write_fds, except_fds, &time_out);
if (s == -1) {
fprintf(stderr, "select() failed: %s (%d)\n", strerror(errno),
errno);
exit(-4);
} else if (s == 0) {
fprintf(stderr, "select() timed out, checking for progress.\n");
}
fprintf(stderr, "Calling scitoken_deserialize_continue()...\n");
rv = scitoken_deserialize_continue(&token, &status, &error);
if (rv != 0) {
fprintf(stderr, "scitoken_deserialize_continue() failed: %s\n",
error);
exit(-3);
}
} while (status != NULL);
print_claim(token, "ver");
print_claim(token, "aud");
print_claim(token, "iss");
// Not a string.
// print_claim(token, "exp");
// Not a string.
// print_claim(token, "iat");
// Not a string.
// print_claim(token, "nbf");
print_claim(token, "jti");
scitoken_destroy(token);
return 0;
}

test/asynch.cc Outdated
Comment on lines 112 to 133
fprintf( stderr, "Calling scitoken_deserialize_continue()...\n" );
rv = scitoken_deserialize_continue( & token, & status, & error );
if( rv != 0 ) {
fprintf( stderr, "scitoken_deserialize_continue() failed: %s\n", error );
exit( -3 );
}
} while (status != NULL);

print_claim(token, "ver");
print_claim(token, "aud");
print_claim(token, "iss");
// Not a string.
// print_claim(token, "exp");
// Not a string.
// print_claim(token, "iat");
// Not a string.
// print_claim(token, "nbf");
print_claim(token, "jti");

scitoken_destroy( token );
return 0;
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[lint] reported by reviewdog 🐶

Suggested change
fprintf( stderr, "Calling scitoken_deserialize_continue()...\n" );
rv = scitoken_deserialize_continue( & token, & status, & error );
if( rv != 0 ) {
fprintf( stderr, "scitoken_deserialize_continue() failed: %s\n", error );
exit( -3 );
}
} while (status != NULL);
print_claim(token, "ver");
print_claim(token, "aud");
print_claim(token, "iss");
// Not a string.
// print_claim(token, "exp");
// Not a string.
// print_claim(token, "iat");
// Not a string.
// print_claim(token, "nbf");
print_claim(token, "jti");
scitoken_destroy( token );
return 0;
}
do {
fd_set *read_fds = NULL;
rv = scitoken_status_get_read_fd_set(&status, &read_fds, &error);
if (rv != 0) {
fprintf(stderr,
"scitoken_status_get_read_fd_set() failed: %s\n",
error);
exit(-2);
}
fd_set *write_fds = NULL;
rv = scitoken_status_get_write_fd_set(&status, &write_fds, &error);
if (rv != 0) {
fprintf(stderr,
"scitoken_status_get_write_fd_set() failed: %s\n",
error);
exit(-2);
}
fd_set *except_fds = NULL;
rv = scitoken_status_get_exc_fd_set(&status, &except_fds, &error);
if (rv != 0) {
fprintf(stderr, "scitoken_status_get_exc_fd_set() failed: %s\n",
error);
exit(-2);
}
int max_fds;
rv = scitoken_status_get_max_fd(&status, &max_fds, &error);
if (rv != 0) {
fprintf(stderr, "scitoken_status_get_max_fds() failed: %s\n",
error);
exit(-2);
}
struct timeval time_out {
1, 0
};
int s =
select(max_fds + 1, read_fds, write_fds, except_fds, &time_out);
if (s == -1) {
fprintf(stderr, "select() failed: %s (%d)\n", strerror(errno),
errno);
exit(-4);
} else if (s == 0) {
fprintf(stderr, "select() timed out, checking for progress.\n");
}
fprintf(stderr, "Calling scitoken_deserialize_continue()...\n");
rv = scitoken_deserialize_continue(&token, &status, &error);
if (rv != 0) {
fprintf(stderr, "scitoken_deserialize_continue() failed: %s\n",
error);
exit(-3);
}
} while (status != NULL);
print_claim(token, "ver");
print_claim(token, "aud");
print_claim(token, "iss");
// Not a string.
// print_claim(token, "exp");
// Not a string.
// print_claim(token, "iat");
// Not a string.
// print_claim(token, "nbf");
print_claim(token, "jti");
scitoken_destroy(token);
return 0;
}

Comment on lines +112 to +133
fprintf( stderr, "Calling scitoken_deserialize_continue()...\n" );
rv = scitoken_deserialize_continue( & token, & status, & error );
if( rv != 0 ) {
fprintf( stderr, "scitoken_deserialize_continue() failed: %s\n", error );
exit( -3 );
}
} while (status != NULL);

print_claim(token, "ver");
print_claim(token, "aud");
print_claim(token, "iss");
// Not a string.
// print_claim(token, "exp");
// Not a string.
// print_claim(token, "iat");
// Not a string.
// print_claim(token, "nbf");
print_claim(token, "jti");

scitoken_destroy(token);
return 0;
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[lint] reported by reviewdog 🐶

Suggested change
fprintf( stderr, "Calling scitoken_deserialize_continue()...\n" );
rv = scitoken_deserialize_continue( & token, & status, & error );
if( rv != 0 ) {
fprintf( stderr, "scitoken_deserialize_continue() failed: %s\n", error );
exit( -3 );
}
} while (status != NULL);
print_claim(token, "ver");
print_claim(token, "aud");
print_claim(token, "iss");
// Not a string.
// print_claim(token, "exp");
// Not a string.
// print_claim(token, "iat");
// Not a string.
// print_claim(token, "nbf");
print_claim(token, "jti");
scitoken_destroy(token);
return 0;
}
do {
fd_set *read_fds = NULL;
rv = scitoken_status_get_read_fd_set(&status, &read_fds, &error);
if (rv != 0) {
fprintf(stderr,
"scitoken_status_get_read_fd_set() failed: %s\n",
error);
exit(-2);
}
fd_set *write_fds = NULL;
rv = scitoken_status_get_write_fd_set(&status, &write_fds, &error);
if (rv != 0) {
fprintf(stderr,
"scitoken_status_get_write_fd_set() failed: %s\n",
error);
exit(-2);
}
fd_set *except_fds = NULL;
rv = scitoken_status_get_exc_fd_set(&status, &except_fds, &error);
if (rv != 0) {
fprintf(stderr, "scitoken_status_get_exc_fd_set() failed: %s\n",
error);
exit(-2);
}
int max_fds;
rv = scitoken_status_get_max_fd(&status, &max_fds, &error);
if (rv != 0) {
fprintf(stderr, "scitoken_status_get_max_fds() failed: %s\n",
error);
exit(-2);
}
struct timeval time_out {
1, 0
};
int s =
select(max_fds + 1, read_fds, write_fds, except_fds, &time_out);
if (s == -1) {
fprintf(stderr, "select() failed: %s (%d)\n", strerror(errno),
errno);
exit(-4);
} else if (s == 0) {
fprintf(stderr, "select() timed out, checking for progress.\n");
}
fprintf(stderr, "Calling scitoken_deserialize_continue()...\n");
rv = scitoken_deserialize_continue(&token, &status, &error);
if (rv != 0) {
fprintf(stderr, "scitoken_deserialize_continue() failed: %s\n",
error);
exit(-3);
}
} while (status != NULL);
print_claim(token, "ver");
print_claim(token, "aud");
print_claim(token, "iss");
// Not a string.
// print_claim(token, "exp");
// Not a string.
// print_claim(token, "iat");
// Not a string.
// print_claim(token, "nbf");
print_claim(token, "jti");
scitoken_destroy(token);
return 0;
}

@Todd-L-Miller
Copy link
Contributor Author

The linter appears to be trying to make recursive corrections, so I'm closing this and will try it again later.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant