Thanks Ayub for the suggestions, I think they are all very useful for
setting up a testing framework.
Looking forward to join the meeting to have a further discussion, @Weiwei
Yang <[email protected]>, could you please help to organize it?

Thanks,
Tao


Ayub Pathan <[email protected]> 于2020年4月21日周二 上午8:28写道:

> Thanks Tao for initiating this thread, I am super excited to be part of
> this discussion.
>
> Here are my two cents..
>
> Framework:
>
>    1. Consider adding something like kubeconfigManager, as this allows
>    extensibility to work with any cluster(not just with the one running
>    locally).
>    2. If I have understood correctly, the nature of the framework is
>    behavior driven. If you agree, consider something which is Ginkgo
>    <https://onsi.github.io/ginkgo/>. It provides many
>    inbuilt extensions and third party integrations.
>    3. Consider using Viper <https://github.com/spf13/viper> for
>    configuration management, as this helps setting defaults,
> reading/writing
>    config files, fileformat conversions, environment variables management
> etc.
>
> I have some more thoughts around test cases as well. Let us set up a
> meeting to discuss these points in detail, as Weiwei suggested.
>
> Thanks
> Ayub Khan
>
> On Sun, Apr 19, 2020 at 9:08 PM Tao Yang <[email protected]> wrote:
>
> > Thanks Weiwei for the comments.
> >
> > Of course we should have some verification results in cases, my initial
> > thought is to execute cases separately but your comments made me realized
> > that maybe it's better to manage them together and provide functions as
> > following:
> > (1) We can keep loosely coupled relationships between framework and
> cases,
> > for example, a new case can be registered into the framework and with
> > specified type (such as benchmark, smoke, or chaos-monkey) and tags (like
> > 'constraints', 'performance', 'fairness', 'function' ...), and provide an
> > common entrance with which users can decide which cases to be included:
> > all, specified type or tags, or specified one.
> > (2) Each cases can return verification results (such as "All requirements
> > of app1 are satisfied":succeed) to the framework and output useful
> > information (which may helps to show execution process or locate the
> cause
> > of a failure) into log file. Chaos-monkey tests can be managed in one
> case
> > with type 'chaos-monkey' which has its own structure and can reuse tools
> in
> > the framework.
> > (3) After all desired test cases are done, a testing report with details
> of
> > these cases can be generated on demand, an example can be:
> > ```
> > Case: allocation
> > Tags: function
> > Status: Failed
> > Verifications:
> >    Allocate pods with node constraint: Succeed
> >    Allocate pods with affinity constraint: Succeed
> >    Allocate pods with anti-affinity constraint: Failed
> > ```
> >
> > Above is my rough idea for that, hope to hear your thoughts.
> >
> > Thanks,
> > Tao
> >
> > Weiwei Yang <[email protected]> 于2020年4月18日周六 上午5:44写道:
> >
> > > Hi Tao
> > >
> > > This is great, we are super interested.
> > > Let's track this effort with
> > > https://issues.apache.org/jira/browse/YUNIKORN-33.
> > > A couple of comments
> > >
> > >    1. There might be one thing missing is, how we can make this
> > >    sustainable as "tests". which means we can 1) run this easily, 2)
> > > generate
> > >    a result, and then 3) verify the result. Do we have #3 now? If not,
> we
> > > need
> > >    to think about how to design a proper algorithm to verify if each
> > > scenario
> > >    passes.
> > >    2. Another thing to add is the chaos monkey tests. This can be
> phase-2
> > >    but it might be good we can consider this now, to make sure our
> > > structure
> > >    can support that.
> > >
> > > We can set up some meetings next week to discuss this in more detail.
> > > Thanks
> > >
> > > On Fri, Apr 17, 2020 at 12:49 AM Tao Yang <[email protected]>
> > wrote:
> > >
> > > > Hello everyone
> > > >
> > > > We are planning to add integration testing framework and initial test
> > > cases
> > > > in https://issues.apache.org/jira/browse/YUNIKORN-29, general
> thoughts
> > > are
> > > > as follows.
> > > >
> > > > Basic testing framework includes:
> > > > 1. AppInfo struct: define basic information, requests and status of
> an
> > > > application
> > > > 2. AppManager interface and its implementations like
> > > DeploymentAppManager:
> > > > support useful operations like create/delete/refresh(status)/wait(for
> > > apps
> > > > to be satisfied or cleaned up) for testing.
> > > > 3. CommonConfig struct: keep several common configurations for
> testing
> > > like
> > > > schedulerName, outputRootPath, namespace, queue etc.
> > > > 4. Output tools like chart painter and file writer with specific
> format
> > > > (like csv).
> > > >
> > > > Initial test cases:
> > > > 1. Throughput : Request a certain number of pods via different
> > schedulers
> > > > and then record the distributions of scheduled pods, draw results of
> > > > different schedulers on the same chart or write results into a file.
> > > > 2. Node Fairness: Request a certain number of pods via different
> > > schedulers
> > > > and then record the distributions of node usage, draw results on
> charts
> > > > separately for different schedulers and write results into a file.
> > > > 3. Queue Fairness (Only for YuniKorn since K8s scheduler doesn't
> > support
> > > it
> > > > yet): Prepare queues with different capacities, request pods with
> > > different
> > > > number or resource for these queues, then record the usage of queues,
> > > draw
> > > > results on the same chart and write results into a file.
> > > >
> > > > Implementation:
> > > > 1. Package structure: add test/integration package in yunikorn-k8shim
> > > > project, the source files with structures or tools of testing
> framework
> > > > will be directly putted in this package, and test cases will be
> > > seperately
> > > > managed by case package in sub-directories: cases/<special-case> such
> > as
> > > > cases/throughput, cases/node-fairness, cases/queue-fairness
> > > > 2. Configurations:  cases keep their specific configurations
> themselves
> > > and
> > > > all configurations can be maintained in a single yaml file together
> > with
> > > > common configurations, the config structure like this:
> > > > ```
> > > > common:
> > > >   schedulerName: yunikorn
> > > >   maxWaitSeconds: 60
> > > >   queue: root.default
> > > >   namespace: default
> > > >   outputRootPath: /tmp
> > > >
> > > > cases:
> > > >   throughput:
> > > >     schedulerNames:
> > > >       - yunikorn
> > > >       - default-scheduelr
> > > >     appName: throughput-test
> > > >     numPods: 10000
> > > >     ...
> > > >   node-fairness:
> > > >     ...
> > > >   queue-fairness:
> > > >     ...
> > > > ```
> > > > 3. Executions: all cases have main function themselves and need one
> > > > command-line argument: configPath, so that we can directly run
> > specified
> > > > case and easily perform integration testing on different scenarios.
> > > >
> > > > Any comments and suggestions are welcome!
> > > >
> > > > Thanks,
> > > > Tao
> > > >
> > >
> >
>

Reply via email to