ed980e9bdec4f32dc022bf54ffecf6ec6628fecd
[smo/teiv.git] /
1 /*
2  *  ============LICENSE_START=======================================================
3  *  Copyright (C) 2024 Ericsson
4  *  Modifications Copyright (C) 2024 OpenInfra Foundation Europe
5  *  ================================================================================
6  *  Licensed under the Apache License, Version 2.0 (the "License");
7  *  you may not use this file except in compliance with the License.
8  *  You may obtain a copy of the License at
9  *
10  *        http://www.apache.org/licenses/LICENSE-2.0
11  *
12  *  Unless required by applicable law or agreed to in writing, software
13  *  distributed under the License is distributed on an "AS IS" BASIS,
14  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  *  See the License for the specific language governing permissions and
16  *  limitations under the License.
17  *
18  *  SPDX-License-Identifier: Apache-2.0
19  *  ============LICENSE_END=========================================================
20  */
21 package org.oran.smo.yangtools.parser.test;
22
23 import static org.junit.Assert.assertTrue;
24
25 import java.io.File;
26 import java.util.ArrayList;
27 import java.util.Arrays;
28 import java.util.Collections;
29 import java.util.List;
30 import java.util.Set;
31 import java.util.stream.Collectors;
32
33 import org.junit.Test;
34
35 import org.oran.smo.yangtools.parser.ParserExecutionContext;
36 import org.oran.smo.yangtools.parser.YangDeviceModel;
37 import org.oran.smo.yangtools.parser.findings.Finding;
38 import org.oran.smo.yangtools.parser.findings.FindingsManager;
39 import org.oran.smo.yangtools.parser.findings.ModifyableFindingSeverityCalculator;
40 import org.oran.smo.yangtools.parser.findings.ParserFindingType;
41 import org.oran.smo.yangtools.parser.input.FileBasedYangInput;
42 import org.oran.smo.yangtools.parser.model.ConformanceType;
43 import org.oran.smo.yangtools.parser.model.YangModel;
44 import org.oran.smo.yangtools.parser.model.statements.threegpp.ThreeGppExtensionsClassSupplier;
45
46 public class ParseIetfModulesTest {
47
48     private static final String ORIG_IANA_CRYPT_HASH = "src/test/resources/_orig-modules/iana-crypt-hash-2014-08-06.yang";
49
50     private static final String ORIG_IETF_YANG_TYPES = "src/test/resources/_orig-modules/ietf-yang-types-2019-11-04.yang";
51     private static final String ORIG_IETF_INET_TYPES = "src/test/resources/_orig-modules/ietf-inet-types-2019-11-04.yang";
52
53     private static final String ORIG_IETF_CRYPTO_TYPES = "src/test/resources/_orig-modules/ietf-crypto-types-2019-11-20.yang";
54     private static final String ORIG_IETF_DATASTORES = "src/test/resources/_orig-modules/ietf-datastores-2018-02-14.yang";
55     private static final String ORIG_IETF_INTERFACES = "src/test/resources/_orig-modules/ietf-interfaces-2018-02-20.yang";
56     private static final String ORIG_IETF_IP = "src/test/resources/_orig-modules/ietf-ip-2018-02-22.yang";
57     private static final String ORIG_IETF_KEYSTORE = "src/test/resources/_orig-modules/ietf-keystore-2019-11-20.yang";
58     private static final String ORIG_IETF_NETCONF = "src/test/resources/_orig-modules/ietf-netconf-2011-06-01.yang";
59     private static final String ORIG_IETF_NETCONF_ACM = "src/test/resources/_orig-modules/ietf-netconf-acm-2018-02-14.yang";
60     private static final String ORIG_IETF_NETCONF_CLIENT = "src/test/resources/_orig-modules/ietf-netconf-client-2019-11-20.yang";
61     private static final String ORIG_IETF_NETCONF_MONITORING = "src/test/resources/_orig-modules/ietf-netconf-monitoring-2010-10-04.yang";
62     private static final String ORIG_IETF_NETCONF_NOTIFICATIONS = "src/test/resources/_orig-modules/ietf-netconf-notifications-2012-02-06.yang";
63     private static final String ORIG_IETF_NETCONF_SERVER = "src/test/resources/_orig-modules/ietf-netconf-server-2018-09-20.yang";
64     private static final String ORIG_IETF_NETCONF_WITH_DEFAULTS = "src/test/resources/_orig-modules/ietf-netconf-with-defaults-2011-06-01.yang";
65     private static final String ORIG_IETF_NETWORK_INSTANCE = "src/test/resources/_orig-modules/ietf-network-instance-2019-01-21.yang";
66     private static final String ORIG_IETF_RESTCONF = "src/test/resources/_orig-modules/ietf-restconf-2017-01-26.yang";
67     private static final String ORIG_IETF_RESTCONF_MONITORING = "src/test/resources/_orig-modules/ietf-restconf-monitoring-2017-01-26.yang";
68     private static final String ORIG_IETF_SSH_CLIENT = "src/test/resources/_orig-modules/ietf-ssh-client-2019-11-20.yang";
69     private static final String ORIG_IETF_SSH_COMMON = "src/test/resources/_orig-modules/ietf-ssh-common-2019-11-20.yang";
70     private static final String ORIG_IETF_SSH_SERVER = "src/test/resources/_orig-modules/ietf-ssh-server-2019-11-20-yang";
71     private static final String ORIG_IETF_SUBSCRIBED_NOTIFICATIONS = "src/test/resources/_orig-modules/ietf-subscribed-notifications-2019-05-06.yang";
72     private static final String ORIG_IETF_SYSTEM = "src/test/resources/_orig-modules/ietf-system-2014-08-06.yang";
73     private static final String ORIG_IETF_TCP_CLIENT = "src/test/resources/_orig-modules/ietf-tcp-client-2019-10-18.yang";
74     private static final String ORIG_IETF_TCP_COMMON = "src/test/resources/_orig-modules/ietf-tcp-common-2019-10-18.yang";
75     private static final String ORIG_IETF_TCP_SERVER = "src/test/resources/_orig-modules/ietf-tcp-server-2019-10-18.yang";
76     private static final String ORIG_IETF_TLS_CLIENT = "src/test/resources/_orig-modules/ietf-tls-client-2019-11-20.yang";
77     private static final String ORIG_IETF_TLS_COMMON = "src/test/resources/_orig-modules/ietf-tls-common-2019-11-20.yang";
78     private static final String ORIG_IETF_TLS_SERVER = "src/test/resources/_orig-modules/ietf-tls-server-2019-11-20.yang";
79
80     private static final String ORIG_IETF_TRUST_ANCHORS = "src/test/resources/_orig-modules/ietf-trust-anchors-2019-04-29.yang";
81     private static final String ORIG_IETF_TRUSTSTORE = "src/test/resources/_orig-modules/ietf-truststore-2019-11-20.yang";
82     private static final String ORIG_IETF_X509_CERT_TO_NAME = "src/test/resources/_orig-modules/ietf-x509-cert-to-name-2014-12-10.yang";
83
84     private static final String ORIG_IETF_YANG_LIBRARY = "src/test/resources/_orig-modules/ietf-yang-library-2019-01-04.yang";
85     private static final String ORIG_IETF_YANG_METADATA = "src/test/resources/_orig-modules/ietf-yang-metadata-2016-08-05.yang";
86     private static final String ORIG_IETF_YANG_PATCH = "src/test/resources/_orig-modules/ietf-yang-patch-2017-02-22.yang";
87     private static final String ORIG_IETF_YANG_PUSH = "src/test/resources/_orig-modules/ietf-yang-push-2019-05-21.yang";
88     private static final String ORIG_IETF_YANG_SCHEMA_MOUNT = "src/test/resources/_orig-modules/ietf-yang-schema-mount-2019-01-14.yang";
89
90     @Test
91     public void test_all_ietf() {
92
93         YangDeviceModel yangDeviceModel;
94         ModifyableFindingSeverityCalculator severityCalculator;
95         FindingsManager findingsManager;
96         ParserExecutionContext context;
97
98         yangDeviceModel = new YangDeviceModel("Yang Parser JAR Test Device Model");
99         severityCalculator = new ModifyableFindingSeverityCalculator();
100         findingsManager = new FindingsManager(severityCalculator);
101
102         final ThreeGppExtensionsClassSupplier otherStatementFactory = new ThreeGppExtensionsClassSupplier();
103
104         context = new ParserExecutionContext(findingsManager, Arrays.asList(otherStatementFactory));
105         context.setFailFast(false);
106         context.setIgnoreImportedProtocolAccessibleObjects(true);
107
108         severityCalculator.suppressFinding(ParserFindingType.P114_TYPEDEF_NOT_USED.toString());
109         severityCalculator.suppressFinding(ParserFindingType.P115_TYPEDEF_USED_ONCE_ONLY.toString());
110         severityCalculator.suppressFinding(ParserFindingType.P132_GROUPING_NOT_USED.toString());
111         severityCalculator.suppressFinding(ParserFindingType.P133_GROUPING_USED_ONCE_ONLY.toString());
112         severityCalculator.suppressFinding(ParserFindingType.P143_ENUM_WITHOUT_VALUE.toString());
113         severityCalculator.suppressFinding(ParserFindingType.P144_BIT_WITHOUT_POSITION.toString());
114
115         final List<String> ietfModules = Arrays.asList(ORIG_IETF_YANG_TYPES, ORIG_IETF_INET_TYPES,
116
117                 ORIG_IETF_DATASTORES, ORIG_IETF_INTERFACES, ORIG_IETF_IP, ORIG_IETF_NETCONF, ORIG_IETF_NETCONF_ACM,
118                 ORIG_IETF_NETCONF_MONITORING, ORIG_IETF_NETCONF_NOTIFICATIONS, ORIG_IETF_NETCONF_WITH_DEFAULTS,
119                 ORIG_IETF_NETWORK_INSTANCE, ORIG_IETF_RESTCONF, ORIG_IETF_RESTCONF_MONITORING,
120                 ORIG_IETF_SUBSCRIBED_NOTIFICATIONS, ORIG_IETF_SYSTEM, ORIG_IETF_TCP_CLIENT, ORIG_IETF_TCP_COMMON,
121                 ORIG_IETF_TCP_SERVER, ORIG_IETF_X509_CERT_TO_NAME, ORIG_IETF_YANG_LIBRARY, ORIG_IETF_YANG_METADATA,
122                 ORIG_IETF_YANG_PATCH, ORIG_IETF_YANG_PUSH, ORIG_IETF_YANG_SCHEMA_MOUNT,
123
124                 ORIG_IANA_CRYPT_HASH
125
126         /*
127          * All of the below are not stable, i.e. not released as RFCs yet.
128          *
129          * They use import-by-revision. We will not process these for now.
130          */
131
132         //                              ORIG_IETF_CRYPTO_TYPES,
133         //                              ORIG_IETF_KEYSTORE,
134         //                              ORIG_IETF_NETCONF_CLIENT,
135         //                              ORIG_IETF_NETCONF_SERVER,
136         //                              ORIG_IETF_SSH_CLIENT,
137         //                              ORIG_IETF_SSH_COMMON,
138         //                              ORIG_IETF_SSH_SERVER,
139         //                              ORIG_IETF_TLS_CLIENT,
140         //                              ORIG_IETF_TLS_COMMON,
141         //                              ORIG_IETF_TLS_SERVER,
142         //                              ORIG_IETF_TRUST_ANCHORS,
143         //                              ORIG_IETF_TRUSTSTORE,
144         );
145
146         final List<YangModel> yangFiles = new ArrayList<>();
147         for (final String absoluteImplementsFilePath : ietfModules) {
148             yangFiles.add(new YangModel(new FileBasedYangInput(new File(absoluteImplementsFilePath)),
149                     ConformanceType.IMPLEMENT));
150         }
151
152         yangDeviceModel.parseIntoYangModels(context, yangFiles);
153
154         assertTrue(findingsManager.getAllFindings().size() == 0);
155
156         printFindings(findingsManager.getAllFindings());
157     }
158
159     private void printFindings(final Set<Finding> findings) {
160
161         final List<String> collect = findings.stream().map(Finding::toString).collect(Collectors.toList());
162         Collections.sort(collect);
163         collect.forEach(System.err::println);
164     }
165 }