summaryrefslogtreecommitdiffstats
path: root/README.md
blob: 422cc8233aacaf6d41a54a0172f4f4035763cd09 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
# Glusto Libs

`glusto-libs` repo contains the Libraries/Modules necessary for automating the gluster tests.
It mainly provides python bindings for the GlusterD-2.0 APIs.
Latest Code for this repo is managed on review.gluster.org


Refer the [glusto-doc](http://glusto.readthedocs.io/en/latest/) for info
on `glusto` framework.
Issues need to be filled against the
[Github](https://github.com/gluster/glusto-libs/issues) repo.


To automate/run glusto-tests on GD2 environment we need to do following steps:
-----------------------------------------------------------------------------
-   install `glusto`
-   clone `glusto-libs` repo
-   clone `glusto-tests` repo
-   install all packages (i.e, glustolibs-gluster-gd2, glustolibs-io and glustolibs-misc libraries)


How to install glusto:
----------------------
One can use either of the three methods.

-   using pip

        # pip install --upgrade git+git://github.com/loadtheaccumulator/glusto.git

-   using git

        # git clone https://github.com/loadtheaccumulator/glusto.git
        # cd glusto
        # python setup.py install

- using ansible: install glusto, glusto-tests

        # ansible-playbook -i host.ini glusto-tests/ansible/deploy-glusto.yaml


For more info refer the [docs](http://glusto.readthedocs.io/en/latest/userguide/install.html).


How to clone glusto-tests and glusto-libs repo:
------------------------------------------------
- using git

        # git clone ssh://user-name@review.gluster.org/glusto-libs

- using git

        # git clone ssh://user-name@review.gluster.org/glusto-tests


How to install the glustolibs-gluster-gd2, glustolibs-io and glustolibs-misc libraries:
---------------------------------------------------------------------------------------
    # git clone ssh://user-name@review.gluster.org/glusto-libs
    # cd glusto-libs/glustolibs-gluster-gd2
    # python setup.py install
    # cd ../../glusto-tests/glustolibs-io
    # python setup.py install
    # cd ../../glusto-tests/glustolibs-misc
    # python setup.py install


To install glusto-tests dependencies:
-------------------------------------
`python-docx` needs to be installed when we run IO's and validates on client node.

- To install run:

	*# easy_install pip
        # pip install --pre python-docx*

How to run the test case:
-------------------------
-   Update the information about the servers, clients,
    servers_info, client_info, running_on_volumes, running_on_mounts
    and volume_create_force etc, which is necessary on the config
    file[config](https://github.com/gluster/glusto-tests/blob/master/tests/gluster_tests_config.yml).
    Refer the following for more info [link](http://glusto.readthedocs.io/en/latest/userguide/configurable.html).

-   glusto-tests are run using the `glusto` command available after installing
    the glusto framework. The various options to run tests as provided by
    glusto framework:

    - To run PyTest tests:

        - To run all tests that are marked with tag 'bvt':
             *# glusto -c config.yml --pytest='-v -x tests -m bvt'*

        - To run all tests that are under bvt folder:
             *# glusto -c config.yml --pytest='-v -s bvt/'*

        - To run a single test case:
            *# glusto -c config.yml --pytest='-v -s -k test_demo1'*

    For more info about running these tests, refer the [docs](http://glusto.readthedocs.io/en/latest/userguide/glusto.html#options-for-running-unit-tests).


Writing tests/libraries for GD2:
--------------------------------
 - `tests` directory in glusto-tests contain testcases. Testcases are written as component wise.
Testcases name and file name should should start with test_.

 - `glustolibs-gluster-gd2` directory in glusto-libs contains libraries for GD2 api's.
Libraries for io's and miscellaneous are written on `glustolibs-io` and `glustolibs-misc`
respectively. These functions or libraries can be used while writing testcases.

 - While writing testcases or libraries follow:
 
	 - Please follow the [PEP008 style-guide](https://www.python.org/dev/peps/pep-0008/).
	 - Makes sure all the pylint and pyflakes error are fixed
          For example:

              - C0326: Exactly one space required around assignment
              - C0111: Missing module doc-string (missing-doc string)
              - W: 50: Too long line

          For more information on [pylint](https://docs.pylint.org/en/1.6.0/tutorial.html) and on [pyflakes](http://flake8.pycqa.org/en/latest/user/error-codes.html)

       

	 - Optimize the code as much as possible. Eliminate the repetitive steps, write it has separate function.
	- Use proper python standards on returning values.
           This style guide is a list of do's and don’ts for [Python programs](http://google.github.io/styleguide/pyguide.html).

	 - Add docstring to every function you write

          For example: This is an example of a module level function

              def module(param1, param2):
                  """
                  Explain what the module function does in breif

                  Args:
                      param1: The first parameter.
                      param2: The second parameter.

                  Returns:
                      The return value of the function.
                  """

	 - Make sure the log messages are grammatically correct and have no spelling mistakes. 
	 - Comment every step of the test case/libraries, log the test step, test result, failure and success.
          For example:

              # peer status from mnode
              g.log.info("Get peer status from node %s", self.mnode)
              ret, out, err = peer_status(self.mnode)
              self.assertEqual(ret, 0, "Failed to get peer status from node %s: %s" % (self.mnode, err))
              g.log.info("Successfully got peer status from node %s:\n%s", self.mnode, out)
	 - Don't not use `print` statements in test-cases/libraries because prints statements are not captured in log files.  Use logger functions to dump messages into log file.

Logging:
--------
Log file name and Log level can be passed as argument to glusto command while
running the glusto-tests. For example:

    # glusto -c 'config.yml' -l /tmp/glustotests_bvt.log --log-level DEBUG --pytest='-v -x tests -m bvt'

One can configure log files, log levels in the testcases as well. For details
on how to use glusto framework for configuring logs in tests Refer the following [docs](http://glusto.readthedocs.io/en/latest/userguide/loggable.html).

Default log location is: `/tmp/glustomain.log`

Note: When using `glusto` via the Python Interactive Interpreter,
the default log location is `/tmp/glusto.log`.