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 duckdb;
49
    private final Engine exasol;
50
    private final Engine firebird;
51
    private final Engine h2;
52
    private final Engine hana;
53
    private final Engine hsqldb;
54
    private final Engine informix;
55
    private final Engine mariadb;
56
    private final Engine mckoi;
57
    private final Engine mimer;
58
    private final Engine monetdb;
59
    private final Engine mysql;
60
    private final Engine neo4j;
61
    private final Engine oracle;
62
    private final Engine postgres;
63
    private final Engine presto;
64
    private final Engine spanner;
65
    private final Engine sqlite;
66
    private final Engine sqlserver;
67
    private final Engine sybase;
68
    private final Engine vertica;
69
    private final Engine virtuoso;
70
71
    private final List<Engine> engines;
72
    private final List<Engine> enginesForFingerprint;
73
74
    private final InjectionModel injectionModel;
75
76
    public MediatorEngine(InjectionModel injectionModel) {
77
        this.injectionModel = injectionModel;
78
        
79
        Engine ctreeace = new Engine(new EngineYaml("ctreeace.yml", injectionModel));
80
        Engine frontbase = new Engine(new EngineYaml("frontbase.yml", injectionModel));
81
        Engine ingres = new Engine(new EngineYaml("ingres.yml", injectionModel));
82
        Engine iris = new Engine(new EngineYaml("iris.yml", injectionModel));
83
        Engine maxdb = new Engine(new EngineYaml("maxdb.yml", injectionModel));
84
        Engine netezza = new Engine(new EngineYaml("netezza.yml", injectionModel));
85
        Engine nuodb = new Engine(new EngineYaml("nuodb.yml", injectionModel));
86
        Engine teradata = new Engine(new EngineYaml("teradata.yml", injectionModel));
87
88
        this.auto = new Engine();
89
        this.access = new Engine(new EngineYaml("access.yml", injectionModel));
90
        this.altibase = new Engine(new EngineYaml("altibase.yml", injectionModel));
91
        this.cubrid = new Engine(new EngineYaml("cubrid.yml", injectionModel));
92
        this.clickhouse = new Engine(new EngineYaml("clickhouse.yml", injectionModel));
93
        this.db2 = new Engine(new EngineYaml("db2.yml", injectionModel));
94
        this.derby = new Engine(new EngineYaml("derby.yml", injectionModel));
95
        this.duckdb = new Engine(new EngineYaml("duckdb.yml", injectionModel));
96
        this.exasol = new Engine(new EngineYaml("exasol.yml", injectionModel));
97
        this.firebird = new Engine(new EngineYaml("firebird.yml", injectionModel));
98
        this.h2 = new Engine(new EngineYaml("h2.yml", injectionModel));
99
        this.hana = new Engine(new EngineYaml("hana.yml", injectionModel));
100
        this.hsqldb = new Engine(new EngineYaml("hsqldb.yml", injectionModel));
101
        this.informix = new Engine(new EngineYaml("informix.yml", injectionModel));
102
        this.mariadb = new Engine(new EngineYaml("mariadb.yml", injectionModel));
103
        this.mckoi = new Engine(new EngineYaml("mckoi.yml", injectionModel));
104
        this.mimer = new Engine(new EngineYaml("mimersql.yml", injectionModel));
105
        this.monetdb = new Engine(new EngineYaml("monetdb.yml", injectionModel));
106
        this.mysql = new Engine(new EngineYaml("mysql.yml", injectionModel));
107
        this.neo4j = new Engine(new EngineYaml("neo4j.yml", injectionModel));
108
        this.oracle = new Engine(new EngineYaml("oracle.yml", injectionModel));
109
        this.postgres = new Engine(new EngineYaml("postgres.yml", injectionModel));
110
        this.presto = new Engine(new EngineYaml("presto.yml", injectionModel));
111
        this.spanner = new Engine(new EngineYaml("spanner.yml", injectionModel));
112
        this.sqlite = new Engine(new EngineYaml("sqlite.yml", injectionModel)) {
113
            @Override
114
            public String transformSqlite(String resultToParse) {
115
                var resultSqlite = new StringBuilder();
116
117
                String resultTmp = resultToParse
118
                    .replaceFirst("[^(]+\\(", StringUtils.EMPTY)
119
                    .trim()
120
                    .replaceAll("\\)$", StringUtils.EMPTY);
121
                resultTmp = resultTmp.replaceAll("\\([^)]+\\)", StringUtils.EMPTY);
122
123
                for (String columnNameAndType: resultTmp.split(",")) {
124 1 1. transformSqlite : negated conditional → NO_COVERAGE
                    if (columnNameAndType.trim().startsWith("primary key")) {
125
                        continue;
126
                    }
127
                    // Some recent SQLite use tabulation character as a separator => split() by any white space \s
128
                    String columnName = columnNameAndType.trim().split("\\s")[0];
129
                    // Some recent SQLite enclose names with ` => strip those `
130
                    columnName = StringUtils.strip(columnName, "`");
131
                    if (
132 1 1. transformSqlite : negated conditional → NO_COVERAGE
                        !"CONSTRAINT".equals(columnName)
133 1 1. transformSqlite : negated conditional → NO_COVERAGE
                        && !"UNIQUE".equals(columnName)
134
                    ) {
135
                        // Generate pattern \4\5\4\6 for injection parsing
136
                        resultSqlite.append((char) 4).append(columnName).append((char) 5).append("0").append((char) 4).append((char) 6);
137
                    }
138
                }
139 1 1. transformSqlite : replaced return value with "" for com/jsql/model/injection/engine/MediatorEngine$1::transformSqlite → NO_COVERAGE
                return resultSqlite.toString();
140
            }
141
        };
142
        this.sqlserver = new Engine(new EngineYaml("sqlserver.yml", injectionModel));
143
        this.sybase = new Engine(new EngineYaml("sybase.yml", injectionModel));
144
        this.vertica = new Engine(new EngineYaml("vertica.yml", injectionModel));
145
        this.virtuoso = new Engine(new EngineYaml("virtuoso.yml", injectionModel));
146
147
        this.engines = Arrays.asList(
148
            this.auto, this.access, this.altibase, ctreeace, this.clickhouse, this.cubrid, this.db2, this.derby, this.duckdb, this.exasol, this.firebird,
149
            frontbase, this.h2, this.hana, this.hsqldb, this.informix, ingres, iris, maxdb, this.mariadb, this.mckoi, this.mimer, this.monetdb,
150
            this.mysql, this.neo4j, netezza, nuodb, this.oracle, this.postgres, this.presto, this.spanner, this.sqlite, this.sqlserver,
151
            this.sybase, teradata, this.vertica, this.virtuoso
152
        );
153
        this.enginesForFingerprint = Arrays.asList(  // Add sortIndex
154
            this.mariadb, this.mysql, this.postgres, this.sqlite, this.h2, this.hsqldb, this.oracle, this.sqlserver, this.spanner, this.duckdb,
155
            this.altibase, ctreeace, this.cubrid, this.db2, this.derby, this.exasol, this.firebird, frontbase, this.hana, this.informix, ingres,
156
            iris, maxdb, this.mckoi, this.mimer, this.monetdb, this.neo4j, netezza, nuodb, this.presto, this.sybase, teradata, this.vertica,
157
            this.virtuoso, this.clickhouse, this.access
158
        );
159
160
        this.engine = this.mysql;
161
        this.engineByUser = this.auto;
162
    }
163
    
164
    public boolean isSqlite() {
165 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();
166
    }
167
    
168
    public Engine fingerprintEngine() {
169
        Engine engineFound = null;
170 1 1. fingerprintEngine : negated conditional → NO_COVERAGE
        if (this.injectionModel.getMediatorEngine().getEngineByUser() != this.injectionModel.getMediatorEngine().getAuto()) {
171
            engineFound = this.injectionModel.getMediatorEngine().getEngineByUser();
172
            LOGGER.log(
173
                LogLevelUtil.CONSOLE_INFORM,
174
                MediatorEngine.LOG_ENGINE,
175 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"),
176 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()
177
            );
178
        } else {
179
            LOGGER.log(LogLevelUtil.CONSOLE_DEFAULT, "[Step 1] Fingerprinting database...");
180
            var insertionCharacter = URLEncoder.encode("'\"#-)'\"*", StandardCharsets.UTF_8);
181
            String pageSource = this.injectionModel.injectWithoutIndex(insertionCharacter, "test#engine");
182
                
183
            var mediatorEngine = this.injectionModel.getMediatorEngine();
184
            Engine[] enginesWithoutAuto = mediatorEngine.getEngines()
185
                .stream()
186 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())
187 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);
188
            
189
            // Test each engine
190
            for (Engine engineTest : enginesWithoutAuto) {
191 1 1. fingerprintEngine : negated conditional → NO_COVERAGE
                if (pageSource.matches(engineTest.instance().fingerprintErrorsAsRegex())) {
192
                    engineFound = engineTest;
193
                    LOGGER.log(
194
                        LogLevelUtil.CONSOLE_SUCCESS,
195
                        "Found [{}] using raw fingerprinting",
196 1 1. lambda$fingerprintEngine$4 : replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::lambda$fingerprintEngine$4 → NO_COVERAGE
                        () -> engineTest
197
                    );
198
                    break;
199
                }
200
            }
201 1 1. fingerprintEngine : negated conditional → NO_COVERAGE
            if (engineFound == null) {
202
                engineFound = this.injectionModel.getMediatorEngine().getMysql();
203
                LOGGER.log(
204
                    LogLevelUtil.CONSOLE_INFORM,
205
                    MediatorEngine.LOG_ENGINE,
206 1 1. lambda$fingerprintEngine$5 : replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::lambda$fingerprintEngine$5 → NO_COVERAGE
                    () -> I18nUtil.valueByKey("LOG_DATABASE_TYPE_NOT_FOUND"),
207 1 1. lambda$fingerprintEngine$6 : replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::lambda$fingerprintEngine$6 → NO_COVERAGE
                    () -> this.injectionModel.getMediatorEngine().getMysql()
208
                );
209
            }
210
        }
211
212
        var urlGitHub = this.injectionModel.getMediatorUtils().propertiesUtil().getProperty("github.url");
213 1 1. fingerprintEngine : removed call to com/jsql/model/InjectionModel::appendAnalysisReport → NO_COVERAGE
        this.injectionModel.appendAnalysisReport(
214
            String.join(
215
                StringUtils.EMPTY,
216
                "# Date: ", LocalDate.now().format(DateTimeFormatter.ISO_LOCAL_DATE),
217
                "<br>&#10;# Tested on: ", SystemUtils.OS_NAME, " (", SystemUtils.OS_VERSION, ")",
218
                "<br>&#10;# Tool: ", StringUtil.APP_NAME, " v", this.injectionModel.getPropertiesUtil().getVersionJsql(),
219
                " (<a href=", urlGitHub, ">", urlGitHub, "</a>)",
220
                "<br>&#10;# Database: ", engineFound.toString(),
221
                "<br>&#10;<br>&#10;## Vulnerability summary</span>"
222
            ),
223
            true
224
        );
225
226 1 1. fingerprintEngine : removed call to com/jsql/model/InjectionModel::sendToViews → NO_COVERAGE
        this.injectionModel.sendToViews(new Seal.ActivateEngine(engineFound));
227 1 1. fingerprintEngine : replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::fingerprintEngine → NO_COVERAGE
        return engineFound;
228
    }
229
    
230
    
231
    // Getter and setter
232
233
    public Engine getEngine() {
234 1 1. getEngine : replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::getEngine → NO_COVERAGE
        return this.engine;
235
    }
236
237
    public void setEngine(Engine engine) {
238
        this.engine = engine;
239
    }
240
241
    public Engine getEngineByUser() {
242 1 1. getEngineByUser : replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::getEngineByUser → NO_COVERAGE
        return this.engineByUser;
243
    }
244
245
    public void setEngineByUser(Engine engineByUser) {
246
        this.engineByUser = engineByUser;
247
    }
248
249
    public List<Engine> getEngines() {
250 1 1. getEngines : replaced return value with Collections.emptyList for com/jsql/model/injection/engine/MediatorEngine::getEngines → NO_COVERAGE
        return this.engines;
251
    }
252
253
    public List<Engine> getEnginesForFingerprint() {
254 1 1. getEnginesForFingerprint : replaced return value with Collections.emptyList for com/jsql/model/injection/engine/MediatorEngine::getEnginesForFingerprint → NO_COVERAGE
        return this.enginesForFingerprint;
255
    }
256
257
258
    // engines
259
260
    public Engine getAuto() {
261 1 1. getAuto : replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::getAuto → NO_COVERAGE
        return this.auto;
262
    }
263
264
    public Engine getAccess() {
265 1 1. getAccess : replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::getAccess → NO_COVERAGE
        return this.access;
266
    }
267
268
    public Engine getAltibase() {
269 1 1. getAltibase : replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::getAltibase → NO_COVERAGE
        return this.altibase;
270
    }
271
272
    public Engine getClickhouse() {
273 1 1. getClickhouse : replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::getClickhouse → NO_COVERAGE
        return this.clickhouse;
274
    }
275
276
    public Engine getCubrid() {
277 1 1. getCubrid : replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::getCubrid → NO_COVERAGE
        return this.cubrid;
278
    }
279
280
    public Engine getDb2() {
281 1 1. getDb2 : replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::getDb2 → NO_COVERAGE
        return this.db2;
282
    }
283
284
    public Engine getDerby() {
285 1 1. getDerby : replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::getDerby → KILLED
        return this.derby;
286
    }
287
288
    public Engine getDuckdb() {
289 1 1. getDuckdb : replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::getDuckdb → NO_COVERAGE
        return this.duckdb;
290
    }
291
292
    public Engine getExasol() {
293 1 1. getExasol : replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::getExasol → NO_COVERAGE
        return this.exasol;
294
    }
295
296
    public Engine getFirebird() {
297 1 1. getFirebird : replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::getFirebird → NO_COVERAGE
        return this.firebird;
298
    }
299
300
    public Engine getH2() {
301 1 1. getH2 : replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::getH2 → KILLED
        return this.h2;
302
    }
303
304
    public Engine getHana() {
305 1 1. getHana : replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::getHana → NO_COVERAGE
        return this.hana;
306
    }
307
308
    public Engine getHsqldb() {
309 1 1. getHsqldb : replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::getHsqldb → KILLED
        return this.hsqldb;
310
    }
311
312
    public Engine getInformix() {
313 1 1. getInformix : replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::getInformix → NO_COVERAGE
        return this.informix;
314
    }
315
316
    public Engine getMariadb() {
317 1 1. getMariadb : replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::getMariadb → NO_COVERAGE
        return this.mariadb;
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 getSpanner() {
353 1 1. getSpanner : replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::getSpanner → NO_COVERAGE
        return this.spanner;
354
    }
355
356
    public Engine getSqlite() {
357 1 1. getSqlite : replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::getSqlite → KILLED
        return this.sqlite;
358
    }
359
360
    public Engine getSqlserver() {
361 1 1. getSqlserver : replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::getSqlserver → KILLED
        return this.sqlserver;
362
    }
363
364
    public Engine getSybase() {
365 1 1. getSybase : replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::getSybase → NO_COVERAGE
        return this.sybase;
366
    }
367
368
    public Engine getVertica() {
369 1 1. getVertica : replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::getVertica → NO_COVERAGE
        return this.vertica;
370
    }
371
372
    public Engine getVirtuoso() {
373 1 1. getVirtuoso : replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::getVirtuoso → NO_COVERAGE
        return this.virtuoso;
374
    }
375
}

Mutations

124

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

132

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

133

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

139

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

165

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

170

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

175

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

176

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

186

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

187

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

191

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

196

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

201

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

206

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

207

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

213

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

226

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

227

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

234

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

242

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

250

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

254

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

261

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

265

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

269

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

273

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

277

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

281

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

285

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

289

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

293

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

297

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

301

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

305

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

309

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

313

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

317

1.1
Location : getMariadb
Killed by : none
replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::getMariadb → 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_1]
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_1]
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_1]
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 : getSpanner
Killed by : none
replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::getSpanner → NO_COVERAGE

357

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

361

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

365

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

369

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

373

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.23.0