cba7ff187cea4c3be8b09de8cca42ee448f6f98f
[nonrtric/plt/sme.git] / capifcore / README.md
1 <!--
2  -
3    ========================LICENSE_START=================================
4    O-RAN-SC
5    %%
6    Copyright (C) 2022: Nordix Foundation
7    %%
8    Licensed under the Apache License, Version 2.0 (the "License");
9    you may not use this file except in compliance with the License.
10    You may obtain a copy of the License at
11
12         http://www.apache.org/licenses/LICENSE-2.0
13
14    Unless required by applicable law or agreed to in writing, software
15    distributed under the License is distributed on an "AS IS" BASIS,
16    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17    See the License for the specific language governing permissions and
18    limitations under the License.
19    ========================LICENSE_END===================================
20
21 -->
22
23 # O-RAN-SC Non-RealTime CAPIF implementation
24
25 This product is a Go implementation of the CAPIF Core function, based on the 3GPP CAPIF interfaces.
26
27 ## Generation of API code
28
29 The CAPIF APIs are generated from the OpenAPI specifications provided by 3GPP. The `generate.sh` script downloads the
30 specifications from 3GPP, fixes them and then generates the APIs. It also generates the mocks needed for unit testing.
31 The specifications are downloaded from the following site; https://www.3gpp.org/ftp/Specs/archive/29_series. To see
32 the APIs in swagger format, see the following link; https://github.com/jdegre/5GC_APIs/tree/Rel-16#common-api-framework-capif.
33 **NOTE!** The documentation in this link is for release 16 of CAPIF, the downloaded specifications are for release 17.
34
35 To fix the specifications there are three tools:
36 - `commoncollector`, collects type definitions from peripheral specifications to keep down the number of dependencies to
37   other specifications. The types to collect are listed in the `definitions.txt`file. Some fixes are hard coded.
38 - `enumfixer`, fixes enumeration definitions so they can be properly generated.
39 - `specificationfixer`, fixes flaws in the specifications so they can be properly generated. All fixes are hard coded.
40
41 ### Steps to add a new dependency to the commoncollector
42
43 When a dependency to a new specification is introduced in any of the CAPIF specifications, see example below, the following steps should be performed:
44
45 For the CAPIF specification "TS29222_CAPIF_Discover_Service_API" a new dependency like the following has been introduced.  
46 websockNotifConfig:  
47 &nbsp;&nbsp;&nbsp;&nbsp;$ref: '**TS29122_CommonData.yaml#/components/schemas/WebsockNotifConfig**'
48
49 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.
50 2. Look in the `generate.sh` script, between the "<replacements_start>" and "<new_replacement>" tags, to see if "TS29122_CommonData"
51    has already been replaced in "TS29222_CAPIF_Discover_Service_API".
52 3. If it has not been replaced, add a replacement above the "<new_replacement>" tag by copying and adapting the two rows above the tag.
53
54 ## Build and test
55
56 To generate mocks manually, run the following command:
57
58     go generate ./...
59
60 **NOTE!** The `helmmanagement` package contains two mocks from the `helm.sh/helm/v3` product. If they need to be
61 regenerated, their interfaces must be copied into the `helm.go` file and a generation annotation added before running
62 the generation script.
63
64 To build the application, run the following command:
65
66     go build
67
68 To run the unit tests for the application, run the following command:
69
70     go test ./...
71
72 The application can also be built as a Docker image, by using the following command:
73
74     docker build . -t capifcore
75
76 ## Run
77
78 To run the Core Function from the command line, run the following commands from this folder.
79
80     ./capifcore [-port <port (default 8080)>]
81