MediatorEngine.java

1
package com.jsql.model.injection.engine;
2
3
import com.jsql.model.InjectionModel;
4
import com.jsql.view.subscriber.Seal;
5
import com.jsql.model.injection.engine.model.Engine;
6
import com.jsql.model.injection.engine.model.EngineYaml;
7
import com.jsql.util.I18nUtil;
8
import com.jsql.util.LogLevelUtil;
9
import com.jsql.util.StringUtil;
10
import org.apache.commons.lang3.StringUtils;
11
import org.apache.commons.lang3.SystemUtils;
12
import org.apache.logging.log4j.LogManager;
13
import org.apache.logging.log4j.Logger;
14
15
import java.net.URLEncoder;
16
import java.nio.charset.StandardCharsets;
17
import java.time.LocalDate;
18
import java.time.format.DateTimeFormatter;
19
import java.util.Arrays;
20
import java.util.List;
21
22
public class MediatorEngine {
23
    
24
    private static final Logger LOGGER = LogManager.getRootLogger();
25
    
26
    private static final String LOG_ENGINE = "{} [{}]";
27
28
    /**
29
     * Database engine currently used.
30
     * It can be switched to another engine by automatic detection or manual selection.
31
     */
32
    private Engine engine;
33
34
    /**
35
     * Database engine selected by user (default UNDEFINED).
36
     * If not UNDEFINED then the next injection will be forced to use the selected engine.
37
     */
38
    private Engine engineByUser;
39
40
    // TODO Replace with enum
41
    private final Engine auto;
42
    private final Engine access;
43
    private final Engine altibase;
44
    private final Engine clickhouse;
45
    private final Engine cubrid;
46
    private final Engine db2;
47
    private final Engine derby;
48
    private final Engine exasol;
49
    private final Engine firebird;
50
    private final Engine h2;
51
    private final Engine hana;
52
    private final Engine hsqldb;
53
    private final Engine informix;
54
    private final Engine mckoi;
55
    private final Engine mimer;
56
    private final Engine monetdb;
57
    private final Engine mysql;
58
    private final Engine neo4j;
59
    private final Engine oracle;
60
    private final Engine postgres;
61
    private final Engine presto;
62
    private final Engine sqlite;
63
    private final Engine sqlserver;
64
    private final Engine sybase;
65
    private final Engine vertica;
66
    private final Engine virtuoso;
67
68
    private final List<Engine> engines;
69
    private final List<Engine> enginesForFingerprint;
70
71
    private final InjectionModel injectionModel;
72
73
    public MediatorEngine(InjectionModel injectionModel) {
74
        this.injectionModel = injectionModel;
75
        
76
        Engine ctreeace = new Engine(new EngineYaml("ctreeace.yml", injectionModel));
77
        Engine frontbase = new Engine(new EngineYaml("frontbase.yml", injectionModel));
78
        Engine ingres = new Engine(new EngineYaml("ingres.yml", injectionModel));
79
        Engine iris = new Engine(new EngineYaml("iris.yml", injectionModel));
80
        Engine maxdb = new Engine(new EngineYaml("maxdb.yml", injectionModel));
81
        Engine netezza = new Engine(new EngineYaml("netezza.yml", injectionModel));
82
        Engine nuodb = new Engine(new EngineYaml("nuodb.yml", injectionModel));
83
        Engine teradata = new Engine(new EngineYaml("teradata.yml", injectionModel));
84
85
        this.auto = new Engine();
86
        this.access = new Engine(new EngineYaml("access.yml", injectionModel));
87
        this.altibase = new Engine(new EngineYaml("altibase.yml", injectionModel));
88
        this.cubrid = new Engine(new EngineYaml("cubrid.yml", injectionModel));
89
        this.clickhouse = new Engine(new EngineYaml("clickhouse.yml", injectionModel));
90
        this.db2 = new Engine(new EngineYaml("db2.yml", injectionModel));
91
        this.derby = new Engine(new EngineYaml("derby.yml", injectionModel));
92
        this.exasol = new Engine(new EngineYaml("exasol.yml", injectionModel));
93
        this.firebird = new Engine(new EngineYaml("firebird.yml", injectionModel));
94
        this.h2 = new Engine(new EngineYaml("h2.yml", injectionModel));
95
        this.hana = new Engine(new EngineYaml("hana.yml", injectionModel));
96
        this.hsqldb = new Engine(new EngineYaml("hsqldb.yml", injectionModel));
97
        this.informix = new Engine(new EngineYaml("informix.yml", injectionModel));
98
        this.mckoi = new Engine(new EngineYaml("mckoi.yml", injectionModel));
99
        this.mimer = new Engine(new EngineYaml("mimersql.yml", injectionModel));
100
        this.monetdb = new Engine(new EngineYaml("monetdb.yml", injectionModel));
101
        this.mysql = new Engine(new EngineYaml("mysql.yml", injectionModel));
102
        this.neo4j = new Engine(new EngineYaml("neo4j.yml", injectionModel));
103
        this.oracle = new Engine(new EngineYaml("oracle.yml", injectionModel));
104
        this.postgres = new Engine(new EngineYaml("postgres.yml", injectionModel));
105
        this.presto = new Engine(new EngineYaml("presto.yml", injectionModel));
106
        this.sqlite = new Engine(new EngineYaml("sqlite.yml", injectionModel)) {
107
            @Override
108
            public String transformSqlite(String resultToParse) {
109
                var resultSqlite = new StringBuilder();
110
111
                String resultTmp = resultToParse
112
                    .replaceFirst("[^(]+\\(", StringUtils.EMPTY)
113
                    .trim()
114
                    .replaceAll("\\)$", StringUtils.EMPTY);
115
                resultTmp = resultTmp.replaceAll("\\([^)]+\\)", StringUtils.EMPTY);
116
117
                for (String columnNameAndType: resultTmp.split(",")) {
118 1 1. transformSqlite : negated conditional → NO_COVERAGE
                    if (columnNameAndType.trim().startsWith("primary key")) {
119
                        continue;
120
                    }
121
                    // Some recent SQLite use tabulation character as a separator => split() by any white space \s
122
                    String columnName = columnNameAndType.trim().split("\\s")[0];
123
                    // Some recent SQLite enclose names with ` => strip those `
124
                    columnName = StringUtils.strip(columnName, "`");
125
                    if (
126 1 1. transformSqlite : negated conditional → NO_COVERAGE
                        !"CONSTRAINT".equals(columnName)
127 1 1. transformSqlite : negated conditional → NO_COVERAGE
                        && !"UNIQUE".equals(columnName)
128
                    ) {
129
                        // Generate pattern \4\5\4\6 for injection parsing
130
                        resultSqlite.append((char) 4).append(columnName).append((char) 5).append("0").append((char) 4).append((char) 6);
131
                    }
132
                }
133 1 1. transformSqlite : replaced return value with "" for com/jsql/model/injection/engine/MediatorEngine$1::transformSqlite → NO_COVERAGE
                return resultSqlite.toString();
134
            }
135
        };
136
        this.sqlserver = new Engine(new EngineYaml("sqlserver.yml", injectionModel));
137
        this.sybase = new Engine(new EngineYaml("sybase.yml", injectionModel));
138
        this.vertica = new Engine(new EngineYaml("vertica.yml", injectionModel));
139
        this.virtuoso = new Engine(new EngineYaml("virtuoso.yml", injectionModel));
140
141
        this.engines = Arrays.asList(
142
            this.auto, access, this.altibase, this.clickhouse, ctreeace, this.cubrid, this.db2, this.derby, this.exasol, this.firebird,
143
            frontbase, this.h2, this.hana, this.hsqldb, this.informix, ingres, iris, maxdb, this.mckoi, this.mimer, this.monetdb,
144
            this.mysql, this.neo4j, netezza, nuodb, this.oracle, this.postgres, this.presto, this.sqlite, this.sqlserver, this.sybase,
145
            teradata, this.vertica, this.virtuoso
146
        );
147
        this.enginesForFingerprint = Arrays.asList(  // Add sortIndex
148
            this.mysql, this.postgres, this.sqlite, this.h2, this.hsqldb, this.oracle, this.sqlserver, access, this.altibase, ctreeace,
149
            this.cubrid, this.db2, this.derby, this.exasol, this.firebird, frontbase, this.hana, this.informix, ingres, iris, maxdb, this.mckoi,
150
            this.mimer, this.monetdb, this.neo4j, netezza, nuodb, this.presto, this.sybase, teradata, this.vertica, this.virtuoso, this.clickhouse
151
        );
152
153 1 1. <init> : removed call to com/jsql/model/injection/engine/MediatorEngine::setEngine → SURVIVED
        this.setEngine(this.mysql);
154
        this.engineByUser = this.auto;
155
    }
156
    
157
    public boolean isSqlite() {
158 2 1. isSqlite : negated conditional → NO_COVERAGE
2. isSqlite : replaced boolean return with true for com/jsql/model/injection/engine/MediatorEngine::isSqlite → NO_COVERAGE
        return this.getEngine() == this.getSqlite();
159
    }
160
    
161
    public Engine fingerprintEngine() {
162
        Engine engineFound = null;
163 1 1. fingerprintEngine : negated conditional → NO_COVERAGE
        if (this.injectionModel.getMediatorEngine().getEngineByUser() != this.injectionModel.getMediatorEngine().getAuto()) {
164
            engineFound = this.injectionModel.getMediatorEngine().getEngineByUser();
165
            LOGGER.log(
166
                LogLevelUtil.CONSOLE_INFORM,
167
                MediatorEngine.LOG_ENGINE,
168 1 1. lambda$fingerprintEngine$0 : replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::lambda$fingerprintEngine$0 → NO_COVERAGE
                () -> I18nUtil.valueByKey("LOG_DATABASE_TYPE_FORCED_BY_USER"),
169 1 1. lambda$fingerprintEngine$1 : replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::lambda$fingerprintEngine$1 → NO_COVERAGE
                () -> this.injectionModel.getMediatorEngine().getEngineByUser()
170
            );
171
        } else {
172
            LOGGER.log(LogLevelUtil.CONSOLE_DEFAULT, "Fingerprinting database...");
173
            var insertionCharacter = URLEncoder.encode("'\"#-)'\"*", StandardCharsets.UTF_8);
174
            String pageSource = this.injectionModel.injectWithoutIndex(insertionCharacter, "test#engine");
175
                
176
            var mediatorEngine = this.injectionModel.getMediatorEngine();
177
            Engine[] enginesWithoutAuto = mediatorEngine.getEngines()
178
                .stream()
179 2 1. lambda$fingerprintEngine$2 : negated conditional → NO_COVERAGE
2. lambda$fingerprintEngine$2 : replaced boolean return with true for com/jsql/model/injection/engine/MediatorEngine::lambda$fingerprintEngine$2 → NO_COVERAGE
                .filter(v -> v != mediatorEngine.getAuto())
180 1 1. lambda$fingerprintEngine$3 : replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::lambda$fingerprintEngine$3 → NO_COVERAGE
                .toArray(Engine[]::new);
181
            
182
            // Test each engine
183
            for (Engine engineTest : enginesWithoutAuto) {
184 1 1. fingerprintEngine : negated conditional → NO_COVERAGE
                if (pageSource.matches(engineTest.instance().fingerprintErrorsAsRegex())) {
185
                    engineFound = engineTest;
186
                    LOGGER.log(
187
                        LogLevelUtil.CONSOLE_SUCCESS,
188
                        MediatorEngine.LOG_ENGINE,
189 1 1. lambda$fingerprintEngine$4 : replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::lambda$fingerprintEngine$4 → NO_COVERAGE
                        () -> "Basic fingerprint matching engine",
190 1 1. lambda$fingerprintEngine$5 : replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::lambda$fingerprintEngine$5 → NO_COVERAGE
                        () -> engineTest
191
                    );
192
                    break;
193
                }
194
            }
195
            engineFound = this.initEngine(engineFound);
196
        }
197
198
        var urlGitHub = this.injectionModel.getMediatorUtils().propertiesUtil().getProperty("github.url");
199 1 1. fingerprintEngine : removed call to com/jsql/model/InjectionModel::appendAnalysisReport → NO_COVERAGE
        this.injectionModel.appendAnalysisReport(
200
            String.join(
201
                StringUtils.EMPTY,
202
                "# Date: ", LocalDate.now().format(DateTimeFormatter.ISO_LOCAL_DATE),
203
                "<br>&#10;# Tested on: ", SystemUtils.OS_NAME, " (", SystemUtils.OS_VERSION, ")",
204
                "<br>&#10;# Tool: ", StringUtil.APP_NAME, " v", this.injectionModel.getPropertiesUtil().getVersionJsql(),
205
                " (<a href=", urlGitHub, ">", urlGitHub, "</a>)",
206
                "<br>&#10;# Database: ", engineFound.toString(),
207
                "<br>&#10;<br>&#10;## Vulnerability summary</span>"
208
            ),
209
            true
210
        );
211
212 1 1. fingerprintEngine : removed call to com/jsql/model/InjectionModel::sendToViews → NO_COVERAGE
        this.injectionModel.sendToViews(new Seal.ActivateEngine(engineFound));
213 1 1. fingerprintEngine : replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::fingerprintEngine → NO_COVERAGE
        return engineFound;
214
    }
215
216
    public Engine initEngine(Engine engine) {
217
        var engineFixed = engine;
218 1 1. initEngine : negated conditional → NO_COVERAGE
        if (engineFixed == null) {
219
            engineFixed = this.injectionModel.getMediatorEngine().getMysql();
220
            LOGGER.log(
221
                LogLevelUtil.CONSOLE_INFORM,
222
                MediatorEngine.LOG_ENGINE,
223 1 1. lambda$initEngine$6 : replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::lambda$initEngine$6 → NO_COVERAGE
                () -> I18nUtil.valueByKey("LOG_DATABASE_TYPE_NOT_FOUND"),
224 1 1. lambda$initEngine$7 : replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::lambda$initEngine$7 → NO_COVERAGE
                () -> this.injectionModel.getMediatorEngine().getMysql()
225
            );
226
        } else {
227
            LOGGER.log(
228
                LogLevelUtil.CONSOLE_INFORM,
229
                MediatorEngine.LOG_ENGINE,
230 1 1. lambda$initEngine$8 : replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::lambda$initEngine$8 → NO_COVERAGE
                () -> I18nUtil.valueByKey("LOG_USING_DATABASE_TYPE"),
231 1 1. lambda$initEngine$9 : replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::lambda$initEngine$9 → NO_COVERAGE
                () -> engine
232
            );
233 1 1. initEngine : removed call to com/jsql/model/InjectionModel::sendToViews → NO_COVERAGE
            this.injectionModel.sendToViews(new Seal.MarkEngineFound(engineFixed));
234
        }
235 1 1. initEngine : replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::initEngine → NO_COVERAGE
        return engineFixed;
236
    }
237
    
238
    
239
    // Getter and setter
240
241
    public Engine getEngine() {
242 1 1. getEngine : replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::getEngine → NO_COVERAGE
        return this.engine;
243
    }
244
245
    public void setEngine(Engine engine) {
246
        this.engine = engine;
247
    }
248
249
    public Engine getEngineByUser() {
250 1 1. getEngineByUser : replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::getEngineByUser → NO_COVERAGE
        return this.engineByUser;
251
    }
252
253
    public void setEngineByUser(Engine engineByUser) {
254
        this.engineByUser = engineByUser;
255
    }
256
257
    public List<Engine> getEngines() {
258 1 1. getEngines : replaced return value with Collections.emptyList for com/jsql/model/injection/engine/MediatorEngine::getEngines → NO_COVERAGE
        return this.engines;
259
    }
260
261
    public List<Engine> getEnginesForFingerprint() {
262 1 1. getEnginesForFingerprint : replaced return value with Collections.emptyList for com/jsql/model/injection/engine/MediatorEngine::getEnginesForFingerprint → NO_COVERAGE
        return this.enginesForFingerprint;
263
    }
264
265
266
    // engines
267
268
    public Engine getAuto() {
269 1 1. getAuto : replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::getAuto → NO_COVERAGE
        return this.auto;
270
    }
271
272
    public Engine getAccess() {
273 1 1. getAccess : replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::getAccess → NO_COVERAGE
        return this.access;
274
    }
275
276
    public Engine getAltibase() {
277 1 1. getAltibase : replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::getAltibase → NO_COVERAGE
        return this.altibase;
278
    }
279
280
    public Engine getClickhouse() {
281 1 1. getClickhouse : replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::getClickhouse → NO_COVERAGE
        return this.clickhouse;
282
    }
283
284
    public Engine getCubrid() {
285 1 1. getCubrid : replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::getCubrid → NO_COVERAGE
        return this.cubrid;
286
    }
287
288
    public Engine getDb2() {
289 1 1. getDb2 : replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::getDb2 → NO_COVERAGE
        return this.db2;
290
    }
291
292
    public Engine getDerby() {
293 1 1. getDerby : replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::getDerby → KILLED
        return this.derby;
294
    }
295
296
    public Engine getExasol() {
297 1 1. getExasol : replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::getExasol → NO_COVERAGE
        return this.exasol;
298
    }
299
300
    public Engine getFirebird() {
301 1 1. getFirebird : replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::getFirebird → NO_COVERAGE
        return this.firebird;
302
    }
303
304
    public Engine getH2() {
305 1 1. getH2 : replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::getH2 → KILLED
        return this.h2;
306
    }
307
308
    public Engine getHana() {
309 1 1. getHana : replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::getHana → NO_COVERAGE
        return this.hana;
310
    }
311
312
    public Engine getHsqldb() {
313 1 1. getHsqldb : replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::getHsqldb → KILLED
        return this.hsqldb;
314
    }
315
316
    public Engine getInformix() {
317 1 1. getInformix : replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::getInformix → NO_COVERAGE
        return this.informix;
318
    }
319
320
    public Engine getMckoi() {
321 1 1. getMckoi : replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::getMckoi → NO_COVERAGE
        return this.mckoi;
322
    }
323
324
    public Engine getMimer() {
325 1 1. getMimer : replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::getMimer → NO_COVERAGE
        return this.mimer;
326
    }
327
328
    public Engine getMonetdb() {
329 1 1. getMonetdb : replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::getMonetdb → NO_COVERAGE
        return this.monetdb;
330
    }
331
332
    public Engine getMysql() {
333 1 1. getMysql : replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::getMysql → KILLED
        return this.mysql;
334
    }
335
336
    public Engine getNeo4j() {
337 1 1. getNeo4j : replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::getNeo4j → NO_COVERAGE
        return this.neo4j;
338
    }
339
340
    public Engine getOracle() {
341 1 1. getOracle : replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::getOracle → KILLED
        return this.oracle;
342
    }
343
344
    public Engine getPostgres() {
345 1 1. getPostgres : replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::getPostgres → KILLED
        return this.postgres;
346
    }
347
348
    public Engine getPresto() {
349 1 1. getPresto : replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::getPresto → NO_COVERAGE
        return this.presto;
350
    }
351
352
    public Engine getSqlite() {
353 1 1. getSqlite : replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::getSqlite → KILLED
        return this.sqlite;
354
    }
355
356
    public Engine getSqlserver() {
357 1 1. getSqlserver : replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::getSqlserver → NO_COVERAGE
        return this.sqlserver;
358
    }
359
360
    public Engine getSybase() {
361 1 1. getSybase : replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::getSybase → NO_COVERAGE
        return this.sybase;
362
    }
363
364
    public Engine getVertica() {
365 1 1. getVertica : replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::getVertica → NO_COVERAGE
        return this.vertica;
366
    }
367
368
    public Engine getVirtuoso() {
369 1 1. getVirtuoso : replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::getVirtuoso → NO_COVERAGE
        return this.virtuoso;
370
    }
371
}

Mutations

118

1.1
Location : transformSqlite
Killed by : none
negated conditional → NO_COVERAGE

126

1.1
Location : transformSqlite
Killed by : none
negated conditional → NO_COVERAGE

127

1.1
Location : transformSqlite
Killed by : none
negated conditional → NO_COVERAGE

133

1.1
Location : transformSqlite
Killed by : none
replaced return value with "" for com/jsql/model/injection/engine/MediatorEngine$1::transformSqlite → NO_COVERAGE

153

1.1
Location : <init>
Killed by : none
removed call to com/jsql/model/injection/engine/MediatorEngine::setEngine → SURVIVED
Covering tests

158

1.1
Location : isSqlite
Killed by : none
negated conditional → NO_COVERAGE

2.2
Location : isSqlite
Killed by : none
replaced boolean return with true for com/jsql/model/injection/engine/MediatorEngine::isSqlite → NO_COVERAGE

163

1.1
Location : fingerprintEngine
Killed by : none
negated conditional → NO_COVERAGE

168

1.1
Location : lambda$fingerprintEngine$0
Killed by : none
replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::lambda$fingerprintEngine$0 → NO_COVERAGE

169

1.1
Location : lambda$fingerprintEngine$1
Killed by : none
replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::lambda$fingerprintEngine$1 → NO_COVERAGE

179

1.1
Location : lambda$fingerprintEngine$2
Killed by : none
negated conditional → NO_COVERAGE

2.2
Location : lambda$fingerprintEngine$2
Killed by : none
replaced boolean return with true for com/jsql/model/injection/engine/MediatorEngine::lambda$fingerprintEngine$2 → NO_COVERAGE

180

1.1
Location : lambda$fingerprintEngine$3
Killed by : none
replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::lambda$fingerprintEngine$3 → NO_COVERAGE

184

1.1
Location : fingerprintEngine
Killed by : none
negated conditional → NO_COVERAGE

189

1.1
Location : lambda$fingerprintEngine$4
Killed by : none
replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::lambda$fingerprintEngine$4 → NO_COVERAGE

190

1.1
Location : lambda$fingerprintEngine$5
Killed by : none
replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::lambda$fingerprintEngine$5 → NO_COVERAGE

199

1.1
Location : fingerprintEngine
Killed by : none
removed call to com/jsql/model/InjectionModel::appendAnalysisReport → NO_COVERAGE

212

1.1
Location : fingerprintEngine
Killed by : none
removed call to com/jsql/model/InjectionModel::sendToViews → NO_COVERAGE

213

1.1
Location : fingerprintEngine
Killed by : none
replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::fingerprintEngine → NO_COVERAGE

218

1.1
Location : initEngine
Killed by : none
negated conditional → NO_COVERAGE

223

1.1
Location : lambda$initEngine$6
Killed by : none
replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::lambda$initEngine$6 → NO_COVERAGE

224

1.1
Location : lambda$initEngine$7
Killed by : none
replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::lambda$initEngine$7 → NO_COVERAGE

230

1.1
Location : lambda$initEngine$8
Killed by : none
replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::lambda$initEngine$8 → NO_COVERAGE

231

1.1
Location : lambda$initEngine$9
Killed by : none
replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::lambda$initEngine$9 → NO_COVERAGE

233

1.1
Location : initEngine
Killed by : none
removed call to com/jsql/model/InjectionModel::sendToViews → NO_COVERAGE

235

1.1
Location : initEngine
Killed by : none
replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::initEngine → NO_COVERAGE

242

1.1
Location : getEngine
Killed by : none
replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::getEngine → NO_COVERAGE

250

1.1
Location : getEngineByUser
Killed by : none
replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::getEngineByUser → NO_COVERAGE

258

1.1
Location : getEngines
Killed by : none
replaced return value with Collections.emptyList for com/jsql/model/injection/engine/MediatorEngine::getEngines → NO_COVERAGE

262

1.1
Location : getEnginesForFingerprint
Killed by : none
replaced return value with Collections.emptyList for com/jsql/model/injection/engine/MediatorEngine::getEnginesForFingerprint → NO_COVERAGE

269

1.1
Location : getAuto
Killed by : none
replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::getAuto → NO_COVERAGE

273

1.1
Location : getAccess
Killed by : none
replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::getAccess → NO_COVERAGE

277

1.1
Location : getAltibase
Killed by : none
replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::getAltibase → NO_COVERAGE

281

1.1
Location : getClickhouse
Killed by : none
replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::getClickhouse → NO_COVERAGE

285

1.1
Location : getCubrid
Killed by : none
replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::getCubrid → NO_COVERAGE

289

1.1
Location : getDb2
Killed by : none
replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::getDb2 → NO_COVERAGE

293

1.1
Location : getDerby
Killed by : ParameterUtilSpock.[engine:spock]/[spec:ParameterUtilSpock]/[feature:$spock_feature_0_2]
replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::getDerby → KILLED

297

1.1
Location : getExasol
Killed by : none
replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::getExasol → NO_COVERAGE

301

1.1
Location : getFirebird
Killed by : none
replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::getFirebird → NO_COVERAGE

305

1.1
Location : getH2
Killed by : ParameterUtilSpock.[engine:spock]/[spec:ParameterUtilSpock]/[feature:$spock_feature_0_2]
replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::getH2 → KILLED

309

1.1
Location : getHana
Killed by : none
replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::getHana → NO_COVERAGE

313

1.1
Location : getHsqldb
Killed by : ParameterUtilSpock.[engine:spock]/[spec:ParameterUtilSpock]/[feature:$spock_feature_0_2]
replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::getHsqldb → KILLED

317

1.1
Location : getInformix
Killed by : none
replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::getInformix → NO_COVERAGE

321

1.1
Location : getMckoi
Killed by : none
replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::getMckoi → NO_COVERAGE

325

1.1
Location : getMimer
Killed by : none
replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::getMimer → NO_COVERAGE

329

1.1
Location : getMonetdb
Killed by : none
replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::getMonetdb → NO_COVERAGE

333

1.1
Location : getMysql
Killed by : ParameterUtilSpock.[engine:spock]/[spec:ParameterUtilSpock]/[feature:$spock_feature_0_2]
replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::getMysql → KILLED

337

1.1
Location : getNeo4j
Killed by : none
replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::getNeo4j → NO_COVERAGE

341

1.1
Location : getOracle
Killed by : ParameterUtilSpock.[engine:spock]/[spec:ParameterUtilSpock]/[feature:$spock_feature_0_2]
replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::getOracle → KILLED

345

1.1
Location : getPostgres
Killed by : ParameterUtilSpock.[engine:spock]/[spec:ParameterUtilSpock]/[feature:$spock_feature_0_2]
replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::getPostgres → KILLED

349

1.1
Location : getPresto
Killed by : none
replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::getPresto → NO_COVERAGE

353

1.1
Location : getSqlite
Killed by : ParameterUtilSpock.[engine:spock]/[spec:ParameterUtilSpock]/[feature:$spock_feature_0_2]
replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::getSqlite → KILLED

357

1.1
Location : getSqlserver
Killed by : none
replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::getSqlserver → NO_COVERAGE

361

1.1
Location : getSybase
Killed by : none
replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::getSybase → NO_COVERAGE

365

1.1
Location : getVertica
Killed by : none
replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::getVertica → NO_COVERAGE

369

1.1
Location : getVirtuoso
Killed by : none
replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::getVirtuoso → NO_COVERAGE

Active mutators

Tests examined


Report generated by PIT 1.22.1