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
10 * http://www.apache.org/licenses/LICENSE-2.0
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.
18 * SPDX-License-Identifier: Apache-2.0
19 * ============LICENSE_END=========================================================
21 package org.oran.smo.yangtools.parser.test;
23 import static org.junit.Assert.assertTrue;
26 import java.util.ArrayList;
27 import java.util.Arrays;
28 import java.util.Collections;
29 import java.util.List;
31 import java.util.stream.Collectors;
33 import org.junit.Test;
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;
46 public class ParseIetfModulesTest {
48 private static final String ORIG_IANA_CRYPT_HASH = "src/test/resources/_orig-modules/iana-crypt-hash-2014-08-06.yang";
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";
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";
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";
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";
91 public void test_all_ietf() {
93 YangDeviceModel yangDeviceModel;
94 ModifyableFindingSeverityCalculator severityCalculator;
95 FindingsManager findingsManager;
96 ParserExecutionContext context;
98 yangDeviceModel = new YangDeviceModel("Yang Parser JAR Test Device Model");
99 severityCalculator = new ModifyableFindingSeverityCalculator();
100 findingsManager = new FindingsManager(severityCalculator);
102 final ThreeGppExtensionsClassSupplier otherStatementFactory = new ThreeGppExtensionsClassSupplier();
104 context = new ParserExecutionContext(findingsManager, Arrays.asList(otherStatementFactory));
105 context.setFailFast(false);
106 context.setIgnoreImportedProtocolAccessibleObjects(true);
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());
115 final List<String> ietfModules = Arrays.asList(ORIG_IETF_YANG_TYPES, ORIG_IETF_INET_TYPES,
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,
127 * All of the below are not stable, i.e. not released as RFCs yet.
129 * They use import-by-revision. We will not process these for now.
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,
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));
152 yangDeviceModel.parseIntoYangModels(context, yangFiles);
154 assertTrue(findingsManager.getAllFindings().size() == 0);
156 printFindings(findingsManager.getAllFindings());
159 private void printFindings(final Set<Finding> findings) {
161 final List<String> collect = findings.stream().map(Finding::toString).collect(Collectors.toList());
162 Collections.sort(collect);
163 collect.forEach(System.err::println);