anchor.diff:  -include("ocs_eap_codec.hrl").
   -include("ocs.hrl").
   -include_lib("common_test/include/ct.hrl").
  +-include_lib("inets/include/mod_auth.hrl").
   
   %% support deprecated_time_unit()
   -define(MILLISECOND, milli_seconds).
  
positive.code: all() -> 
  	[client, get_all_clients, update_client_password, delete_client,
  	subscriber, update_password, update_attributes, delete_subscriber,
  	add_product, find_product, get_products, delete_product].
  
  %%---------------------------------------------------------------------
  %%  Test cases
  
negative.code: 	ok = ocs:delete_product(ProductName),
  	{error, not_found} = ocs:find_product(ProductName).
  
  add_user() ->
  	[{userdata, [{doc, "Create a new user"}]}].
  
  add_user(_Config) ->
  	User = "staff_billing",
  	Password = ocs:generate_password(),
  	Locale = "en",
  	{ok, {E1, E2}} = ocs:add_user(User, Password, Locale),
  	true = is_integer(E1),
  	true = is_integer(E2),
  	{Port, Address, Dir, _} = get_params(),
  	{ok, #httpd_user{username = User, password = Password,
  	user_data = UserData}} = mod_auth:get_user(User, Address, Port, Dir),
  	{_, Locale} = lists:keyfind(locale, 1, UserData),
  	{_, {E1, E2}} = lists:keyfind(last_modified, 1, UserData).
  
  %%---------------------------------------------------------------------
  %%  Internal functions
  %%---------------------------------------------------------------------
  
  get_params() ->
  	{_, _, Info} = lists:keyfind(httpd, 1, inets:services_info()),
  	{_, Port} = lists:keyfind(port, 1, Info),
  	{_, Address} = lists:keyfind(bind_address, 1, Info),
  	{ok, EnvObj} = application:get_env(inets, services),
  	{httpd, HttpdObj} = lists:keyfind(httpd, 1, EnvObj),
  	{directory, {Directory, AuthObj}} = lists:keyfind(directory, 1, HttpdObj),
  	case lists:keyfind(require_group, 1, AuthObj) of
  		{require_group, [Group | _T]} ->
  			{Port, Address, Directory, Group};
  		false ->
  			exit(not_found)
  	end.
  