--- /dev/null
+#include <frsh.h>
+#include <error.h>
+#include <res_dummy.h>
+#include <time.h>
+
+#define N 1000
+
+int main(int argc, char *argv[])
+{
+ int ret;
+ frsh_contract_t contract[N];
+ frsh_vres_id_t vres[N];
+ frsh_rel_time_t budget, period, deadline;
+ frsh_signal_info_t si;
+ int i;
+
+ ret = frsh_init();
+ if (ret) PERROR_AND_EXIT(ret, "frsh_init");
+
+ /* Negotiate N contracts */
+ for (i=0; i<N; i++) {
+ struct timespec t_start, t_end;
+ clock_gettime(CLOCK_MONOTONIC, &t_start);
+ ret = frsh_contract_init(&contract[i]);
+ if (ret) PERROR_AND_EXIT(ret, "frsh_contract_init");
+
+ ret = frsh_contract_set_resource_and_label(
+ &contract[i],
+ DUMMY_RESOURCE_TYPE, DUMMY_RESOURCE_ID,
+ NULL);
+ if (ret) PERROR_AND_EXIT(ret, "frsh_contract_set_resource_and_label");
+
+ budget = fosa_msec_to_rel_time(10);
+ period = fosa_msec_to_rel_time(100);
+ period = fosa_msec_to_rel_time(50);
+ ret = frsh_contract_set_basic_params(&contract[i],
+ &budget,
+ &period,
+ FRSH_WT_BOUNDED,
+ FRSH_CT_REGULAR);
+ if (ret) PERROR_AND_EXIT(ret, "frsh_contract_set_basic_params");
+
+ ret = frsh_contract_set_timing_reqs(&contract[i],
+ false, &deadline,
+ 0, si, 0, si);
+ if (ret) PERROR_AND_EXIT(ret, "frsh_contract_set_timing_reqs");
+
+ ret = frsh_contract_negotiate(&contract[i], &vres[i]);
+ if (ret) PERROR_AND_EXIT(ret, "frsh_contract_negotiate");
+ clock_gettime(CLOCK_MONOTONIC, &t_end);
+ printf("%d %g\n", i, (float)(t_end.tv_sec+1e-9*t_end.tv_nsec) - (t_start.tv_sec+1e-9*t_start.tv_nsec));
+ }
+ /* Cancel N contracts */
+ for (i=0; i<N; i++) {
+ ret = frsh_contract_cancel(vres[i]);
+ if (ret) PERROR_AND_EXIT(ret, "frsh_contract_cancel");
+ }
+ return 0;
+}