| /** @file |
| |
| A brief file description |
| |
| @section license License |
| |
| Licensed to the Apache Software Foundation (ASF) under one |
| or more contributor license agreements. See the NOTICE file |
| distributed with this work for additional information |
| regarding copyright ownership. The ASF licenses this file |
| to you under the Apache License, Version 2.0 (the |
| "License"); you may not use this file except in compliance |
| with the License. You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, software |
| distributed under the License is distributed on an "AS IS" BASIS, |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| See the License for the specific language governing permissions and |
| limitations under the License. |
| */ |
| |
| #pragma once |
| |
| #include "I_EventSystem.h" |
| #include "ts/Regression.h" |
| #include "ts/DynArray.h" |
| |
| /* |
| Regression Test Composition State Machine |
| |
| See RegressionSM.cc at the end for an example |
| */ |
| |
| struct RegressionSM : public Continuation { |
| RegressionTest *t; // for use with rprint |
| |
| // methods to override |
| virtual void run(); // replace with leaf regression |
| virtual RegressionSM * |
| clone() |
| { |
| return new RegressionSM(*this); |
| } // replace for run_xxx(int n,...); |
| |
| // public API |
| void done(int status = REGRESSION_TEST_NOT_RUN); |
| void run(int *pstatus); |
| void run_in(int *pstatus, ink_hrtime t); |
| |
| // internal |
| int status; |
| int *pstatus; |
| RegressionSM *parent; |
| int nwaiting; |
| int nchildren; |
| DynArray<RegressionSM *> children; |
| intptr_t n, ichild; |
| bool parallel; |
| bool repeat; |
| Action *pending_action; |
| |
| int regression_sm_start(int event, void *data); |
| int regression_sm_waiting(int event, void *data); |
| void set_status(int status); |
| void child_done(int status); |
| void xrun(RegressionSM *parent); |
| |
| RegressionSM(RegressionTest *at = NULL) |
| : t(at), |
| status(REGRESSION_TEST_INPROGRESS), |
| pstatus(0), |
| parent(0), |
| nwaiting(0), |
| nchildren(0), |
| children(0), |
| ichild(0), |
| parallel(false), |
| repeat(false), |
| pending_action(0) |
| { |
| mutex = new_ProxyMutex(); |
| } |
| |
| RegressionSM(const RegressionSM &); |
| }; |
| |
| RegressionSM *r_sequential(RegressionTest *t, int n, RegressionSM *sm); |
| RegressionSM *r_sequential(RegressionTest *t, RegressionSM *sm, ...); // terminate list in NULL |
| RegressionSM *r_parallel(RegressionTest *t, int n, RegressionSM *sm); |
| RegressionSM *r_parallel(RegressionTest *t, RegressionSM *sm, ...); // terminate list in NULL |