=================================
Product Certification with VOLTHA
=================================

VOLTHA is part fo the `continuous certification program at ONF <https://opennetworking.org/continuous-certification-program/>`_.
You can see the currently certified products in the `ONF marketplace <https://opennetworking.org/marketplace/?_product_project=voltha>`_.

The following document describes the procedure to include and certify an
OLT or an ONU with VOLTHA.  The process of getting a product certified
consists of several phases:

- testing and validation with VOLTHA at the vendor premises
- showcase of successful integration with VOLTHA to the TST
- shipment and integration of the product (OLT/ONU) at a community lab
  (e.g. Berlin with DT)
- Creation of automated CI jobs in Jenkins that start nightly automation tests.
- Test maintenance. It's the Vendors and the VOLTHA community responsibility
  to maintain the created tests.

Finally a brief Description of the device and a point of contact need to
be sent to `Michelle Roth @ ONF <mroth@linuxfoundation.org>`_ to be
showcased in the `marketplace <https://opennetworking.org/marketplace/?_product_project=voltha>`_ after successful verification.

Once all these steps are completed the product will be certified for
the next release of VOLTHA.  Let's describe each phase in detail.

Vendor's premises Testing
-------------------------
The first step is for the vendor to guarantee that the OLT or the ONU are VOLTHA compatible is complying got ONF's
automated sanity test.
To do so we suggest setting up a HW test pod according as described in the `physical setup guide <https://docs.voltha.org/master/overview/lab_setup.html>`_.

Once the setup is running the next step is running the Sanity tests, as described in the `testing documentation <https://docs.voltha.org/master/voltha-system-tests/README.html#running-tests-on-physical-pod>`_.
If those pass the hardware is ready to be shown to the VOLTHA TST.

Showcase to VOLTHA TST
----------------------
Once the OLT has passed tests in the Vendor lab it's ready to be showcased to the VOLTHA Technical Steering Team.
The request needs to be performed to the Technical TST leader or to `Timon Sloane <timon@opennetworking.org>`_ who will
forward the request appropriately.
During a scheduled TST meeting (Tuesday 8 AM PST) the vendor will showcase the OLT/ONU to the TST by starting from a
fresh VOLTHA instance, connecting the OLT and then performing the Sanity test.
With the test passing the TST will give approval for shipment of the device (ONU/OLT) to an ONF community lab.

ONF's community lab integration
-------------------------------

Once the TST has given approval for device integration in VOLTHA nighly tests the Vendor needs to ship the device to
any one of the ONF community lab, including a wiring diagram (if needed) Currently there are two locations:

- DT Office in Berlin, Germany. Address: Winterfeldtstraße 21, 10781 Berlin, Germany. Point of contact `Bjoern Nagel @ DT <NagelB@telekom.de>`_

Once the OLT arrives the technicians will rack it and wire it according to
the diagram shared.  For an OLT the NNI connection will be provided to the
AGG switch and all the management will also be connected with management IP
assigned according to the network of the pod.

For an ONU it will be connected to one of the existing OLTs in the pod,
according to space, technology and topology requirements.  Once all the
racking and wiring is complete the device will appear under the ONF network,
accessible via VPN.

Automated CI Jobs
-----------------
Once the device in included in one of the community pods it's the responsibility of the vendor to integrate
it into the nightly VOLTHA tests. This process is done by submitting a series of patches to different repositories.
The process is different for ONUs and OLTs.
To create jenkins jobs see https://docs.voltha.org/master/testing/voltha_test_automation.html#hardware-or-physical-pod-jobs

OLT
+++
A new OLT needs a full new configuration, job and data.
The job can be created according to the desired workflow to be tested. Information can be found in the
`system tests information <https://docs.voltha.org/master/testing/voltha_test_automation.html#hardware-or-physical-pod-jobs>`_
The required patches are:

- ci-management. Creates the job that will run in jenkins. Job Example ``https://github.com/opencord/ci-management/blob/master/jjb/voltha-test/voltha-certification.yaml``
- pod configs. Inserts information about the OLT and target ONUs data. `Data example <https://github.com/opencord/pod-configs/blob/master/deployment-configs/menlo-certification-pod-radisys-1600g-DT.yaml>`_
  and `kubernetes example <https://github.com/opencord/pod-configs/blob/master/kubernetes-configs/menlo-certification-pod-radisys-1600g.conf>`_
- voltha-system-tests. Adds the sadis configuration for the OLT and the ONU. `Sadis Example <https://github.com/opencord/voltha-system-tests/blob/master/tests/data/menlo-certification-pod-radisys-1600g-sadis-DT.json>`_

Once these are created and merged the job will appear on jenkins and
run accordingly.

ONU
+++

A new ONU it's attached to an existing OLT, so just the information for
that ONU needs to be added to the proper OLT files.

The required patches are:

- pod configs. Inserts information about the ONU into an existing pod. `Info and Target example <https://github.com/opencord/pod-configs/blob/master/deployment-configs/menlo-certification-pod-radisys-1600g-DT.yaml>`_
- voltha-system-tests. Adds the sadis configuration for the ONU. Example `Sadis ONU example <https://github.com/opencord/voltha-system-tests/blob/master/tests/data/menlo-certification-pod-radisys-1600g-sadis-DT.json>`_

Job maintenance
---------------

It's the responsibility of the Vendor, the VOLTHA TST and the community at
large to mantain, manage and update the job to make sure the OLT gets
certified for each of the following VOLTHA releases.



ONF Contacts
------------
For any further information please contact:

- `Michelle Roth <mroth@opennetworking.org>`_
