diff --git a/all.sas b/all.sas
index 1c046c7..d91b20e 100644
--- a/all.sas
+++ b/all.sas
@@ -13015,7 +13015,10 @@ create table &libds(
@file mm_adduser2group.sas
@brief Adds a user to a group
@details Adds a user to a metadata group. The macro first checks whether the
- user is in that group, and if not, the user is added.
+ user is in that group, and if not, the user is added.
+
+ Note that the macro does not check inherited group memberships - it looks at
+ direct members only.
Usage:
@@ -13025,10 +13028,10 @@ create table &libds(
@param user= the user name (not displayname)
@param group= the group to which to add the user
- @param mdebug= set to 1 to show debug info in log
+ @param mdebug= (0) set to 1 to show debug info in log
- @warning the macro does not check inherited group memberships - it looks at
- direct members only
+
Related Files
+ @li ms_adduser2group.sas
@version 9.3
@author Allan Bowe
@@ -19101,6 +19104,128 @@ run;
%let rc=%sysfunc(filename(&fref));
%mend mfs_httpheader;
+/**
+ @file
+ @brief Adds a user to a group on SASjs Server
+ @details Adds a user to a group based on userid and groupid. Both user and
+ group must already exist.
+
+ Examples:
+
+ %ms_adduser2group(uid=1,gid=1)
+
+
+ @param [in] uid= (0) The User ID to be added
+ @param [in] gid= (0) The Group ID to contain the new user
+ @param [in] mdebug= (0) Set to 1 to enable DEBUG messages
+ @param [out] outds= (work.ms_adduser2group) This output dataset will contain
+ the new list of group members, eg:
+|DISPLAYNAME:$18.|USERNAME:$10.|ID:best.|
+|---|---|---|
+|`Super Admin `|`secretuser `|`1`|
+|`Sabir Hassan`|`sabir`|`2`|
+|`Mihajlo Medjedovic `|`mihajlo `|`3`|
+|`Ivor Townsend `|`ivor `|`4`|
+|`New User `|`newuser `|`5`|
+
+
+
+ SAS Macros
+ @li mf_getuniquefileref.sas
+ @li mf_getuniquelibref.sas
+ @li mp_abort.sas
+
+ Related Files
+ @li ms_creategroup.sas
+ @li ms_createuser.sas
+
+**/
+
+%macro ms_adduser2group(uid=0
+ ,gid=0
+ ,outds=work.ms_adduser2group
+ ,mdebug=0
+ );
+
+%mp_abort(
+ iftrue=(&syscc ne 0)
+ ,mac=ms_adduser2group.sas
+ ,msg=%str(syscc=&syscc on macro entry)
+)
+
+%local fref0 fref1 fref2 libref optval rc msg;
+%let fref0=%mf_getuniquefileref();
+%let fref1=%mf_getuniquefileref();
+%let libref=%mf_getuniquelibref();
+
+/* avoid sending bom marker to API */
+%let optval=%sysfunc(getoption(bomfile));
+options nobomfile;
+
+data _null_;
+ file &fref0 lrecl=1000;
+ infile "&_sasjs_tokenfile" lrecl=1000;
+ input;
+ if _n_=1 then put "accept: application/json";
+ put _infile_;
+run;
+
+%if &mdebug=1 %then %do;
+ %put _local_;
+ data _null_;
+ infile &fref0;
+ input;
+ put _infile_;
+ run;
+%end;
+
+proc http method='POST' headerin=&fref0 out=&fref1
+ url="&_sasjs_apiserverurl/SASjsApi/group/&gid/&uid";
+%if &mdebug=1 %then %do;
+ debug level=1;
+%end;
+run;
+
+%mp_abort(
+ iftrue=(&syscc ne 0)
+ ,mac=ms_adduser2group.sas
+ ,msg=%str(Issue submitting query to SASjsApi/group)
+)
+
+libname &libref JSON fileref=&fref1;
+
+data &outds;
+ set &libref..users;
+ drop ordinal_root ordinal_users;
+%if &mdebug=1 %then %do;
+ putlog _all_;
+%end;
+run;
+
+
+%mp_abort(
+ iftrue=(&syscc ne 0)
+ ,mac=ms_creategroup.sas
+ ,msg=%str(Issue reading response JSON)
+)
+
+/* reset options */
+options &optval;
+
+%if &mdebug=0 %then %do;
+ filename &fref0 clear;
+ filename &fref1 clear;
+ libname &libref clear;
+%end;
+%else %do;
+ data _null_;
+ infile &fref1;
+ input;
+ putlog _infile_;
+ run;
+%end;
+
+%mend ms_adduser2group;
/**
@file
@brief Creates a file on SASjs Drive
@@ -20146,13 +20271,19 @@ filename &headref clear;
@file
@brief Fetches the list of groups from SASjs Server
@details Fetches the list of groups from SASjs Server and writes them to an
- output dataset.
+ output dataset. Provide a username to filter for the groups for a particular
+ user.
Example:
%ms_getgroups(outds=userlist)
+ With filter:
+
+ %ms_getgroups(outds=userlist, user=James)
+
@param [in] mdebug= (0) Set to 1 to enable DEBUG messages
+ @param [in] user= (0) Provide the username on which to filter
@param [out] outds= (work.ms_getgroups) This output dataset will contain the
list of groups. Format:
|NAME:$32.|DESCRIPTION:$64.|GROUPID:best.|
@@ -20174,9 +20305,10 @@ filename &headref clear;
**/
%macro ms_getgroups(
- outds=work.ms_getgroups
- ,mdebug=0
- );
+ user=0,
+ outds=work.ms_getgroups,
+ mdebug=0
+);
%mp_abort(
iftrue=(&syscc ne 0)
@@ -20190,7 +20322,10 @@ filename &headref clear;
/* groups api does not exist in desktop mode */
data &outds;
length NAME $32 DESCRIPTION $64. GROUPID 8;
- call missing (of _all_);
+ name="&sysuserid";
+ description="&sysuserid (group - desktop mode)";
+ groupid=1;
+ output;
stop;
run;
%return;
@@ -20220,12 +20355,35 @@ run;
run;
%end;
-proc http method='GET' headerin=&fref0 out=&fref1
- url="&_sasjs_apiserverurl/SASjsApi/group";
-%if &mdebug=1 %then %do;
- debug level=1;
+%if "&user"="0" %then %do;
+ proc http method='GET' headerin=&fref0 out=&fref1
+ url="&_sasjs_apiserverurl/SASjsApi/group";
+ %if &mdebug=1 %then %do;
+ debug level=1;
+ %end;
+ run;
+%end;
+%else %do;
+ /*
+ first get the userid - cannot do this directly until the following ticket
+ is closed: https://github.com/sasjs/server/issues/188
+ */
+ data;run;
+ %local ds1 uid;
+ %let ds1=&syslast;
+ %ms_getusers(outds=&ds1)
+ %let uid=0;
+ data _null_;
+ set &ds1;
+ if username="&user" then call symputx('uid',id,'l');
+ run;
+ proc http method='GET' headerin=&fref0 out=&fref1
+ url="&_sasjs_apiserverurl/SASjsApi/group";
+ %if &mdebug=1 %then %do;
+ debug level=1;
+ %end;
+ run;
%end;
-run;
%mp_abort(
iftrue=(&syscc ne 0)
@@ -20262,13 +20420,18 @@ options &optval;
@file
@brief Fetches the list of users from SASjs Server
@details Fetches the list of users from SASjs Server and writes them to an
- output dataset.
+ output dataset. Can also be filtered, for a particular group.
Example:
%ms_getusers(outds=userlist)
+ Filtering for a group:
+
+ %ms_getusers(outds=work.groupmembers, group=GROUPNAME)
+
@param [in] mdebug= (0) Set to 1 to enable DEBUG messages
+ @param [in] group= (0) Set to a group name to filter members for that group
@param [out] outds= (work.ms_getusers) This output dataset will contain the
list of user accounts. Format:
|DISPLAYNAME:$18.|USERNAME:$10.|ID:best.|
@@ -20284,18 +20447,22 @@ options &optval;
SAS Macros
@li mf_getuniquefileref.sas
@li mf_getuniquelibref.sas
+ @li mf_getuniquename.sas
@li mp_abort.sas
+ @li ms_getgroups.sas
Related Files
@li ms_createuser.sas
+ @li ms_getgroups.sas
@li ms_getusers.test.sas
**/
%macro ms_getusers(
- outds=work.ms_getusers
- ,mdebug=0
- );
+ outds=work.ms_getusers,
+ group=0,
+ mdebug=0
+);
%mp_abort(
iftrue=(&syscc ne 0)
@@ -20327,27 +20494,56 @@ run;
put _infile_;
run;
%end;
-
-proc http method='GET' headerin=&fref0 out=&fref1
- url="&_sasjs_apiserverurl/SASjsApi/user";
-%if &mdebug=1 %then %do;
- debug level=1;
+%if "&group"="0" %then %do;
+ proc http method='GET' headerin=&fref0 out=&fref1
+ url="&_sasjs_apiserverurl/SASjsApi/user";
+ %if &mdebug=1 %then %do;
+ debug level=1;
+ %end;
+ run;
+%end;
+%else %do;
+ /* currently we only have an API to fetch by group ID */
+ /* so first fetch all the groups, and grab the id */
+ %local groupid ds1;
+ %let ds1=%mf_getuniquename(prefix=groups);
+ %ms_getgroups(outds=&ds1)
+ data _null_;
+ set &ds1;
+ where name="&group";
+ call symputx('groupid',groupid,'l');
+ run;
+
+ proc http method='GET' headerin=&fref0 out=&fref1
+ url="&_sasjs_apiserverurl/SASjsApi/group/&groupid";
+ %if &mdebug=1 %then %do;
+ debug level=1;
+ %put &=groupid;
+ %end;
+ run;
+
%end;
-run;
%mp_abort(
iftrue=(&syscc ne 0)
,mac=ms_getusers.sas
- ,msg=%str(Issue submitting GET query to SASjsApi/user)
+ ,msg=%str(Issue submitting API query)
)
libname &libref JSON fileref=&fref1;
-data &outds;
- set &libref..root;
- drop ordinal_root;
-run;
-
+%if "&group"="0" %then %do;
+ data &outds;
+ set &libref..root;
+ drop ordinal_root;
+ run;
+%end;
+%else %do;
+ data &outds;
+ set &libref..users;
+ drop ordinal_root ordinal_users;
+ run;
+%end;
%mp_abort(
iftrue=(&syscc ne 0)
diff --git a/meta/mm_adduser2group.sas b/meta/mm_adduser2group.sas
index 6b5ce81..5b61053 100644
--- a/meta/mm_adduser2group.sas
+++ b/meta/mm_adduser2group.sas
@@ -2,7 +2,10 @@
@file mm_adduser2group.sas
@brief Adds a user to a group
@details Adds a user to a metadata group. The macro first checks whether the
- user is in that group, and if not, the user is added.
+ user is in that group, and if not, the user is added.
+
+ Note that the macro does not check inherited group memberships - it looks at
+ direct members only.
Usage:
@@ -12,10 +15,10 @@
@param user= the user name (not displayname)
@param group= the group to which to add the user
- @param mdebug= set to 1 to show debug info in log
+ @param mdebug= (0) set to 1 to show debug info in log
- @warning the macro does not check inherited group memberships - it looks at
- direct members only
+ Related Files
+ @li ms_adduser2group.sas
@version 9.3
@author Allan Bowe
diff --git a/sasjs/sasjsconfig.json b/sasjs/sasjsconfig.json
index 34da685..de6d74a 100644
--- a/sasjs/sasjsconfig.json
+++ b/sasjs/sasjsconfig.json
@@ -67,7 +67,7 @@
},
{
"name": "server",
- "serverUrl": "https://sas.analytium.co.uk:5007",
+ "serverUrl": "https://sas.4gl.io:5001",
"serverType": "SASJS",
"httpsAgentOptions": {
"allowInsecureRequests": false
@@ -107,4 +107,4 @@
"contextName": "SAS Job Execution compute context"
}
]
-}
+}
\ No newline at end of file
diff --git a/server/ms_adduser2group.sas b/server/ms_adduser2group.sas
new file mode 100644
index 0000000..07c75be
--- /dev/null
+++ b/server/ms_adduser2group.sas
@@ -0,0 +1,122 @@
+/**
+ @file
+ @brief Adds a user to a group on SASjs Server
+ @details Adds a user to a group based on userid and groupid. Both user and
+ group must already exist.
+
+ Examples:
+
+ %ms_adduser2group(uid=1,gid=1)
+
+
+ @param [in] uid= (0) The User ID to be added
+ @param [in] gid= (0) The Group ID to contain the new user
+ @param [in] mdebug= (0) Set to 1 to enable DEBUG messages
+ @param [out] outds= (work.ms_adduser2group) This output dataset will contain
+ the new list of group members, eg:
+|DISPLAYNAME:$18.|USERNAME:$10.|ID:best.|
+|---|---|---|
+|`Super Admin `|`secretuser `|`1`|
+|`Sabir Hassan`|`sabir`|`2`|
+|`Mihajlo Medjedovic `|`mihajlo `|`3`|
+|`Ivor Townsend `|`ivor `|`4`|
+|`New User `|`newuser `|`5`|
+
+
+
+ SAS Macros
+ @li mf_getuniquefileref.sas
+ @li mf_getuniquelibref.sas
+ @li mp_abort.sas
+
+ Related Files
+ @li ms_creategroup.sas
+ @li ms_createuser.sas
+
+**/
+
+%macro ms_adduser2group(uid=0
+ ,gid=0
+ ,outds=work.ms_adduser2group
+ ,mdebug=0
+ );
+
+%mp_abort(
+ iftrue=(&syscc ne 0)
+ ,mac=ms_adduser2group.sas
+ ,msg=%str(syscc=&syscc on macro entry)
+)
+
+%local fref0 fref1 fref2 libref optval rc msg;
+%let fref0=%mf_getuniquefileref();
+%let fref1=%mf_getuniquefileref();
+%let libref=%mf_getuniquelibref();
+
+/* avoid sending bom marker to API */
+%let optval=%sysfunc(getoption(bomfile));
+options nobomfile;
+
+data _null_;
+ file &fref0 lrecl=1000;
+ infile "&_sasjs_tokenfile" lrecl=1000;
+ input;
+ if _n_=1 then put "accept: application/json";
+ put _infile_;
+run;
+
+%if &mdebug=1 %then %do;
+ %put _local_;
+ data _null_;
+ infile &fref0;
+ input;
+ put _infile_;
+ run;
+%end;
+
+proc http method='POST' headerin=&fref0 out=&fref1
+ url="&_sasjs_apiserverurl/SASjsApi/group/&gid/&uid";
+%if &mdebug=1 %then %do;
+ debug level=1;
+%end;
+run;
+
+%mp_abort(
+ iftrue=(&syscc ne 0)
+ ,mac=ms_adduser2group.sas
+ ,msg=%str(Issue submitting query to SASjsApi/group)
+)
+
+libname &libref JSON fileref=&fref1;
+
+data &outds;
+ set &libref..users;
+ drop ordinal_root ordinal_users;
+%if &mdebug=1 %then %do;
+ putlog _all_;
+%end;
+run;
+
+
+%mp_abort(
+ iftrue=(&syscc ne 0)
+ ,mac=ms_creategroup.sas
+ ,msg=%str(Issue reading response JSON)
+)
+
+/* reset options */
+options &optval;
+
+%if &mdebug=0 %then %do;
+ filename &fref0 clear;
+ filename &fref1 clear;
+ libname &libref clear;
+%end;
+%else %do;
+ data _null_;
+ infile &fref1;
+ input;
+ putlog _infile_;
+ run;
+%end;
+
+%mend ms_adduser2group;
diff --git a/server/ms_getgroups.sas b/server/ms_getgroups.sas
index bb96b23..524e454 100644
--- a/server/ms_getgroups.sas
+++ b/server/ms_getgroups.sas
@@ -2,13 +2,19 @@
@file
@brief Fetches the list of groups from SASjs Server
@details Fetches the list of groups from SASjs Server and writes them to an
- output dataset.
+ output dataset. Provide a username to filter for the groups for a particular
+ user.
Example:
%ms_getgroups(outds=userlist)
+ With filter:
+
+ %ms_getgroups(outds=userlist, user=James)
+
@param [in] mdebug= (0) Set to 1 to enable DEBUG messages
+ @param [in] user= (0) Provide the username on which to filter
@param [out] outds= (work.ms_getgroups) This output dataset will contain the
list of groups. Format:
|NAME:$32.|DESCRIPTION:$64.|GROUPID:best.|
@@ -30,9 +36,10 @@
**/
%macro ms_getgroups(
- outds=work.ms_getgroups
- ,mdebug=0
- );
+ user=0,
+ outds=work.ms_getgroups,
+ mdebug=0
+);
%mp_abort(
iftrue=(&syscc ne 0)
@@ -46,7 +53,10 @@
/* groups api does not exist in desktop mode */
data &outds;
length NAME $32 DESCRIPTION $64. GROUPID 8;
- call missing (of _all_);
+ name="&sysuserid";
+ description="&sysuserid (group - desktop mode)";
+ groupid=1;
+ output;
stop;
run;
%return;
@@ -76,12 +86,35 @@ run;
run;
%end;
-proc http method='GET' headerin=&fref0 out=&fref1
- url="&_sasjs_apiserverurl/SASjsApi/group";
-%if &mdebug=1 %then %do;
- debug level=1;
+%if "&user"="0" %then %do;
+ proc http method='GET' headerin=&fref0 out=&fref1
+ url="&_sasjs_apiserverurl/SASjsApi/group";
+ %if &mdebug=1 %then %do;
+ debug level=1;
+ %end;
+ run;
+%end;
+%else %do;
+ /*
+ first get the userid - cannot do this directly until the following ticket
+ is closed: https://github.com/sasjs/server/issues/188
+ */
+ data;run;
+ %local ds1 uid;
+ %let ds1=&syslast;
+ %ms_getusers(outds=&ds1)
+ %let uid=0;
+ data _null_;
+ set &ds1;
+ if username="&user" then call symputx('uid',id,'l');
+ run;
+ proc http method='GET' headerin=&fref0 out=&fref1
+ url="&_sasjs_apiserverurl/SASjsApi/group";
+ %if &mdebug=1 %then %do;
+ debug level=1;
+ %end;
+ run;
%end;
-run;
%mp_abort(
iftrue=(&syscc ne 0)
diff --git a/server/ms_getusers.sas b/server/ms_getusers.sas
index 5228736..a93e98c 100644
--- a/server/ms_getusers.sas
+++ b/server/ms_getusers.sas
@@ -2,13 +2,18 @@
@file
@brief Fetches the list of users from SASjs Server
@details Fetches the list of users from SASjs Server and writes them to an
- output dataset.
+ output dataset. Can also be filtered, for a particular group.
Example:
%ms_getusers(outds=userlist)
+ Filtering for a group:
+
+ %ms_getusers(outds=work.groupmembers, group=GROUPNAME)
+
@param [in] mdebug= (0) Set to 1 to enable DEBUG messages
+ @param [in] group= (0) Set to a group name to filter members for that group
@param [out] outds= (work.ms_getusers) This output dataset will contain the
list of user accounts. Format:
|DISPLAYNAME:$18.|USERNAME:$10.|ID:best.|
@@ -24,18 +29,22 @@
SAS Macros
@li mf_getuniquefileref.sas
@li mf_getuniquelibref.sas
+ @li mf_getuniquename.sas
@li mp_abort.sas
+ @li ms_getgroups.sas
Related Files
@li ms_createuser.sas
+ @li ms_getgroups.sas
@li ms_getusers.test.sas
**/
%macro ms_getusers(
- outds=work.ms_getusers
- ,mdebug=0
- );
+ outds=work.ms_getusers,
+ group=0,
+ mdebug=0
+);
%mp_abort(
iftrue=(&syscc ne 0)
@@ -67,27 +76,56 @@ run;
put _infile_;
run;
%end;
-
-proc http method='GET' headerin=&fref0 out=&fref1
- url="&_sasjs_apiserverurl/SASjsApi/user";
-%if &mdebug=1 %then %do;
- debug level=1;
+%if "&group"="0" %then %do;
+ proc http method='GET' headerin=&fref0 out=&fref1
+ url="&_sasjs_apiserverurl/SASjsApi/user";
+ %if &mdebug=1 %then %do;
+ debug level=1;
+ %end;
+ run;
+%end;
+%else %do;
+ /* currently we only have an API to fetch by group ID */
+ /* so first fetch all the groups, and grab the id */
+ %local groupid ds1;
+ %let ds1=%mf_getuniquename(prefix=groups);
+ %ms_getgroups(outds=&ds1)
+ data _null_;
+ set &ds1;
+ where name="&group";
+ call symputx('groupid',groupid,'l');
+ run;
+
+ proc http method='GET' headerin=&fref0 out=&fref1
+ url="&_sasjs_apiserverurl/SASjsApi/group/&groupid";
+ %if &mdebug=1 %then %do;
+ debug level=1;
+ %put &=groupid;
+ %end;
+ run;
+
%end;
-run;
%mp_abort(
iftrue=(&syscc ne 0)
,mac=ms_getusers.sas
- ,msg=%str(Issue submitting GET query to SASjsApi/user)
+ ,msg=%str(Issue submitting API query)
)
libname &libref JSON fileref=&fref1;
-data &outds;
- set &libref..root;
- drop ordinal_root;
-run;
-
+%if "&group"="0" %then %do;
+ data &outds;
+ set &libref..root;
+ drop ordinal_root;
+ run;
+%end;
+%else %do;
+ data &outds;
+ set &libref..users;
+ drop ordinal_root ordinal_users;
+ run;
+%end;
%mp_abort(
iftrue=(&syscc ne 0)
diff --git a/tests/serveronly/ms_adduser2group.test.sas b/tests/serveronly/ms_adduser2group.test.sas
new file mode 100644
index 0000000..177e089
--- /dev/null
+++ b/tests/serveronly/ms_adduser2group.test.sas
@@ -0,0 +1,52 @@
+/**
+ @file
+ @brief Testing ms_adduser2group.sas macro
+
+ SAS Macros
+ @li mf_getuniquename.sas
+ @li mp_assert.sas
+ @li mp_assertscope.sas
+ @li ms_adduser2group.sas
+ @li ms_creategroup.sas
+
+**/
+
+/* first, create an empty group */
+%let group=%substr(%mf_getuniquename(),1,8);
+%ms_creategroup(&group, desc=The description,mdebug=&sasjs_mdebug,outds=test1a)
+%let groupid=0;
+data _null_;
+ set work.test1a;
+ call symputx('groupid',groupid);
+run;
+%mp_assert(
+ iftrue=(&groupid>0),
+ desc=Checking that group was created with an ID,
+ outds=work.test_results
+)
+
+/* now add a user (user 1 always exists) */
+
+
+%mp_assertscope(SNAPSHOT)
+%ms_adduser2group(uid=1,gid=&groupid,mdebug=&sasjs_mdebug,outds=test1)
+%mp_assertscope(COMPARE
+ ,ignorelist=MCLIB0_JADP1LEN MCLIB0_JADPNUM MCLIB0_JADVLEN
+)
+
+/* check the user is in the output list */
+%let checkid=0;
+data _null_;
+ set work.test1;
+ if id=1 then call symputx('checkid',1);
+run;
+%mp_assert(
+ iftrue=(&checkid=1),
+ desc=Checking that user was created in the new group,
+ outds=work.test_results
+)
+
+
+
+
+
diff --git a/tests/serveronly/ms_createuser.test.sas b/tests/serveronly/ms_createuser.test.sas
index 1479ab8..6749066 100644
--- a/tests/serveronly/ms_createuser.test.sas
+++ b/tests/serveronly/ms_createuser.test.sas
@@ -23,6 +23,7 @@
data _null_;
set work.test1;
call symputx('id',id);
+ putlog (_all_)(=);
run;
%mp_assert(
iftrue=(&id>0),
@@ -35,7 +36,8 @@ run;
%let checkid=0;
data _null_;
set work.test2;
- where username="&user";
+ if _n_<20 then putlog (_all_)(=);
+ if username="&user";
call symputx('checkid',id);
run;
%mp_assert(
diff --git a/tests/serveronly/ms_getusers.test.sas b/tests/serveronly/ms_getusers.test.sas
index addc778..307c6c8 100644
--- a/tests/serveronly/ms_getusers.test.sas
+++ b/tests/serveronly/ms_getusers.test.sas
@@ -3,6 +3,8 @@
@brief Testing ms_getusers.sas macro
SAS Macros
+ @li ms_creategroup.sas
+ @li ms_adduser2group.sas
@li ms_getusers.sas
@li mp_assertdsobs.sas
@li mp_assertscope.sas
@@ -18,6 +20,39 @@
%mp_assertdsobs(work.test1,test=ATLEAST 1)
+/**
+ * test the extraction of group members
+ */
+
+/* create a group */
+%let group=%substr(%mf_getuniquename(),1,8);
+%ms_creategroup(&group, desc=some desc,mdebug=&sasjs_mdebug,outds=work.group)
+%let gid=0;
+data _null_;
+ set work.group;
+ call symputx('gid',groupid);
+run;
+
+/* add a member */
+%ms_adduser2group(uid=1,gid=&gid)
+
+/* extract the members */
+%ms_getusers(group=&group,outds=test2)
+
+/* check the user is in the output list */
+%let checkid=0;
+data _null_;
+ set work.test2;
+ if id=1 then call symputx('checkid',1);
+run;
+%mp_assert(
+ iftrue=(&checkid=1),
+ desc=Checking that admin user was created in the new group,
+ outds=work.test_results
+)
+
+
+
diff --git a/tests/serveronly/ms_runstp.test.sas b/tests/serveronly/ms_runstp.test.sas
index 00fc38f..457688b 100644
--- a/tests/serveronly/ms_runstp.test.sas
+++ b/tests/serveronly/ms_runstp.test.sas
@@ -34,7 +34,7 @@ options mprint;
)
%mp_assertscope(COMPARE)
-libname webeen json (weboot);
+libname webeen json fileref=weboot;
data _null_;
infile weboot;
diff --git a/tests/serveronly/ms_testservice.test.sas b/tests/serveronly/ms_testservice.test.sas
index e61f7dc..34c892c 100644
--- a/tests/serveronly/ms_testservice.test.sas
+++ b/tests/serveronly/ms_testservice.test.sas
@@ -10,7 +10,12 @@
**/
filename ft15f001 temp;
-parmcards4;
+data _null_;
+ file ft15f001;
+ infile cards;
+ input;
+ put _infile_;
+cards4;
%put Initialising sendObj: ;
%put _all_;
%webout(FETCH)
@@ -27,6 +32,7 @@ parmcards4;
%mend x; %x()
%webout(CLOSE)
;;;;
+run;
%put creating web service: &mcTestAppLoc/services;
%ms_createwebservice(
path=&mcTestAppLoc/services,
diff --git a/tests/serveronly/ms_webout.test.sas b/tests/serveronly/ms_webout.test.sas
index 34dc868..bd68244 100644
--- a/tests/serveronly/ms_webout.test.sas
+++ b/tests/serveronly/ms_webout.test.sas
@@ -20,7 +20,7 @@ run;
%ms_webout(OBJ,datasets,fref=&fref)
%ms_webout(CLOSE,fref=&fref)
-libname test JSON (&fref);
+libname test JSON fileref=&fref;
data root;
set test.root;
call symputx('checkval',sysvlong);