# O-RAN-SC Non-RealTime CAPIF implementation This product is a Go implementation of the CAPIF Core function, based on the 3GPP CAPIF interfaces. ## Generation of API code The CAPIF APIs are generated from the OpenAPI specifications provided by 3GPP. The `generate.sh` script downloads the specifications from 3GPP, fixes them and then generates the APIs. It also generates the mocks needed for unit testing. The specifications are downloaded from the following site; https://www.3gpp.org/ftp/Specs/archive/29_series. To see the APIs in swagger format, see the following link; https://github.com/jdegre/5GC_APIs/tree/Rel-16#common-api-framework-capif. **NOTE!** The documentation in this link is for release 16 of CAPIF, the downloaded specifications are for release 17. To fix the specifications there are three tools: - `commoncollector`, collects type definitions from peripheral specifications to keep down the number of dependencies to other specifications. The types to collect are listed in the `definitions.txt`file. Some fixes are hard coded. - `enumfixer`, fixes enumeration definitions so they can be properly generated. - `specificationfixer`, fixes flaws in the specifications so they can be properly generated. All fixes are hard coded. ### Steps to add a new dependency to the commoncollector When a dependency to a new specification is introduced in any of the CAPIF specifications, see example below, the following steps should be performed: For the CAPIF specification "TS29222_CAPIF_Discover_Service_API" a new dependency like the following has been introduced. websockNotifConfig:     $ref: '**TS29122_CommonData.yaml#/components/schemas/WebsockNotifConfig**' 1. Copy the bold part of the reference and add it to the `definitions.txt` file. This step is not needed if the type is already defined in the file. 2. Look in the `generate.sh` script, between the "" and "" tags, to see if "TS29122_CommonData" has already been replaced in "TS29222_CAPIF_Discover_Service_API". 3. If it has not been replaced, add a replacement above the "" tag by copying and adapting the two rows above the tag. ## Build and test To generate mocks manually, run the following command: go generate ./... **NOTE!** The `helmmanagement` package contains two mocks from the `helm.sh/helm/v3` product. If they need to be regenerated, their interfaces must be copied into the `helm.go` file and a generation annotation added before running the generation script. To build the application, run the following command: go build To run the unit tests for the application, run the following command: go test ./... The application can also be built as a Docker image, by using the following command: docker build . -t capifcore ## Run To run the Core Function from the command line, run the following commands from this folder. ./capifcore [-port ]