Skip to content

Commit d11bca0

Browse files
committed
C#: Migrate unit tests to data extensions.
1 parent e432e65 commit d11bca0

File tree

6 files changed

+97
-100
lines changed

6 files changed

+97
-100
lines changed

csharp/ql/test/library-tests/dataflow/external-models/ExternalFlow.ql

Lines changed: 0 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -7,40 +7,6 @@ import DataFlow::PathGraph
77
import semmle.code.csharp.dataflow.ExternalFlow
88
import CsvValidation
99

10-
class SummaryModelTest extends SummaryModelCsv {
11-
override predicate row(string row) {
12-
row =
13-
[
14-
//"namespace;type;overrides;name;signature;ext;inputspec;outputspec;kind;provenance",
15-
"My.Qltest;D;false;StepArgRes;(System.Object);;Argument[0];ReturnValue;taint;manual",
16-
"My.Qltest;D;false;StepArgArg;(System.Object,System.Object);;Argument[0];Argument[1];taint;manual",
17-
"My.Qltest;D;false;StepArgQual;(System.Object);;Argument[0];Argument[this];taint;manual",
18-
"My.Qltest;D;false;StepFieldGetter;();;Argument[this].Field[My.Qltest.D.Field];ReturnValue;value;manual",
19-
"My.Qltest;D;false;StepFieldSetter;(System.Object);;Argument[0];Argument[this].Field[My.Qltest.D.Field];value;manual",
20-
"My.Qltest;D;false;StepFieldSetter;(System.Object);;Argument[this];ReturnValue.Field[My.Qltest.D.Field2];value;manual",
21-
"My.Qltest;D;false;StepPropertyGetter;();;Argument[this].Property[My.Qltest.D.Property];ReturnValue;value;manual",
22-
"My.Qltest;D;false;StepPropertySetter;(System.Object);;Argument[0];Argument[this].Property[My.Qltest.D.Property];value;manual",
23-
"My.Qltest;D;false;StepElementGetter;();;Argument[this].Element;ReturnValue;value;manual",
24-
"My.Qltest;D;false;StepElementSetter;(System.Object);;Argument[0];Argument[this].Element;value;manual",
25-
"My.Qltest;D;false;Apply<,>;(System.Func<S,T>,S);;Argument[1];Argument[0].Parameter[0];value;manual",
26-
"My.Qltest;D;false;Apply<,>;(System.Func<S,T>,S);;Argument[0].ReturnValue;ReturnValue;value;manual",
27-
"My.Qltest;D;false;Apply2<>;(System.Action<S>,S,S);;Argument[1].Field[My.Qltest.D.Field];Argument[0].Parameter[0];value;manual",
28-
"My.Qltest;D;false;Apply2<>;(System.Action<S>,S,S);;Argument[2].Field[My.Qltest.D.Field2];Argument[0].Parameter[0];value;manual",
29-
"My.Qltest;D;false;Map<,>;(S[],System.Func<S,T>);;Argument[0].Element;Argument[1].Parameter[0];value;manual",
30-
"My.Qltest;D;false;Map<,>;(S[],System.Func<S,T>);;Argument[1].ReturnValue;ReturnValue.Element;value;manual",
31-
"My.Qltest;D;false;Parse;(System.String,System.Int32);;Argument[0];Argument[1];taint;manual",
32-
"My.Qltest;D;false;Reverse;(System.Object[]);;Argument[0].WithElement;ReturnValue;value;manual",
33-
"My.Qltest;E;true;get_MyProp;();;Argument[this].Field[My.Qltest.E.MyField];ReturnValue;value;manual",
34-
"My.Qltest;E;true;set_MyProp;(System.Object);;Argument[0];Argument[this].Field[My.Qltest.E.MyField];value;manual",
35-
"My.Qltest;G;false;GeneratedFlow;(System.Object);;Argument[0];ReturnValue;value;generated",
36-
"My.Qltest;G;false;GeneratedFlowArgs;(System.Object,System.Object);;Argument[0];ReturnValue;value;generated",
37-
"My.Qltest;G;false;GeneratedFlowArgs;(System.Object,System.Object);;Argument[1];ReturnValue;value;generated",
38-
"My.Qltest;G;false;MixedFlowArgs;(System.Object,System.Object);;Argument[0];ReturnValue;value;generated",
39-
"My.Qltest;G;false;MixedFlowArgs;(System.Object,System.Object);;Argument[1];ReturnValue;value;manual",
40-
]
41-
}
42-
}
43-
4410
class Conf extends TaintTracking::Configuration {
4511
Conf() { this = "ExternalFlow" }
4612

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
extensions:
2+
3+
- addsTo:
4+
pack: codeql/csharp-all
5+
extensible: extSourceModel
6+
data:
7+
# "namespace", "type", "overrides", "name", "signature", "ext", "spec", "kind", "provenance",
8+
- ["My.Qltest", "A", false, "Src1", "()", "", "ReturnValue", "local", "manual"]
9+
- ["My.Qltest", "A", false, "Src1", "(System.String)", "", "ReturnValue", "local", "manual"]
10+
- ["My.Qltest", "A", false, "Src1", "", "", "ReturnValue", "local", "manual"]
11+
- ["My.Qltest", "A", false, "Src2", "()", "", "ReturnValue", "local", "manual"]
12+
- ["My.Qltest", "A", false, "Src3", "()", "", "ReturnValue", "local", "manual"]
13+
- ["My.Qltest", "A", true, "Src2", "()", "", "ReturnValue", "local", "manual"]
14+
- ["My.Qltest", "A", true, "Src3", "()", "", "ReturnValue", "local", "manual"]
15+
- ["My.Qltest", "A", false, "SrcArg", "(System.Object)", "", "Argument[0]", "local", "manual"]
16+
- ["My.Qltest", "A", false, "SrcArg", "(System.Object)", "", "Argument", "local", "manual"]
17+
- ["My.Qltest", "A", true, "SrcParam", "(System.Object)", "", "Parameter[0]", "local", "manual"]
18+
- ["My.Qltest", "SourceAttribute", false, "", "", "Attribute", "ReturnValue", "local", "manual"]
19+
- ["My.Qltest", "SourceAttribute", false, "", "", "Attribute", "Parameter", "local", "manual"]
20+
- ["My.Qltest", "SourceAttribute", false, "", "", "Attribute", "", "local", "manual"]
21+
- ["My.Qltest", "A", false, "SrcTwoArg", "(System.String,System.String)", "", "ReturnValue", "local", "manual"]
22+
23+
- addsTo:
24+
pack: codeql/csharp-all
25+
extensible: extSinkModel
26+
data:
27+
# "namespace", "type", "overrides", "name", "signature", "ext", "spec", "kind", "provenance"
28+
- ["My.Qltest", "B", false, "Sink1", "(System.Object)", "", "Argument[0]", "code", "manual"]
29+
- ["My.Qltest", "B", false, "SinkMethod", "()", "", "ReturnValue", "xss", "manual"]
30+
- ["My.Qltest", "SinkAttribute", false, "", "", "Attribute", "ReturnValue", "html", "manual"]
31+
- ["My.Qltest", "SinkAttribute", false, "", "", "Attribute", "Argument", "remote", "manual"]
32+
- ["My.Qltest", "SinkAttribute", false, "", "", "Attribute", "", "sql", "manual"]
33+
34+
# Summaries relevant for the ExternalFlow testcase.
35+
- addsTo:
36+
pack: codeql/csharp-all
37+
extensible: extSummaryModel
38+
data:
39+
# "namespace", "type", "overrides", "name", "signature", "ext", "inputspec", "outputspec", "kind", "provenance"
40+
- ["My.Qltest", "D", false, "StepArgRes", "(System.Object)","", "Argument[0]", "ReturnValue", "taint", "manual"]
41+
- ["My.Qltest", "D", false, "StepArgArg", "(System.Object,System.Object)", "", "Argument[0]", "Argument[1]", "taint", "manual"]
42+
- ["My.Qltest", "D", false, "StepArgQual", "(System.Object)", "", "Argument[0]", "Argument[this]", "taint", "manual"]
43+
- ["My.Qltest", "D", false, "StepFieldGetter", "()", "", "Argument[this].Field[My.Qltest.D.Field]", "ReturnValue", "value", "manual"]
44+
- ["My.Qltest", "D", false, "StepFieldSetter", "(System.Object)", "", "Argument[0]", "Argument[this].Field[My.Qltest.D.Field]", "value", "manual"]
45+
- ["My.Qltest", "D", false, "StepFieldSetter", "(System.Object)", "", "Argument[this]", "ReturnValue.Field[My.Qltest.D.Field2]", "value", "manual"]
46+
- ["My.Qltest", "D", false, "StepPropertyGetter", "()", "", "Argument[this].Property[My.Qltest.D.Property]", "ReturnValue", "value", "manual"]
47+
- ["My.Qltest", "D", false, "StepPropertySetter", "(System.Object)", "", "Argument[0]", "Argument[this].Property[My.Qltest.D.Property]", "value", "manual"]
48+
- ["My.Qltest", "D", false, "StepElementGetter", "()", "", "Argument[this].Element", "ReturnValue", "value", "manual"]
49+
- ["My.Qltest", "D", false, "StepElementSetter", "(System.Object)", "", "Argument[0]", "Argument[this].Element", "value", "manual"]
50+
- ["My.Qltest", "D", false, "Apply<,>", "(System.Func<S,T>,S)", "", "Argument[1]", "Argument[0].Parameter[0]", "value", "manual"]
51+
- ["My.Qltest", "D", false, "Apply<,>", "(System.Func<S,T>,S)", "", "Argument[0].ReturnValue", "ReturnValue", "value", "manual"]
52+
- ["My.Qltest", "D", false, "Apply2<>", "(System.Action<S>,S,S)", "", "Argument[1].Field[My.Qltest.D.Field]", "Argument[0].Parameter[0]", "value", "manual"]
53+
- ["My.Qltest", "D", false, "Apply2<>", "(System.Action<S>,S,S)", "", "Argument[2].Field[My.Qltest.D.Field2]", "Argument[0].Parameter[0]", "value", "manual"]
54+
- ["My.Qltest", "D", false, "Map<,>", "(S[],System.Func<S,T>)", "", "Argument[0].Element", "Argument[1].Parameter[0]", "value", "manual"]
55+
- ["My.Qltest", "D", false, "Map<,>", "(S[],System.Func<S,T>)", "", "Argument[1].ReturnValue", "ReturnValue.Element", "value", "manual"]
56+
- ["My.Qltest", "D", false, "Parse", "(System.String,System.Int32)", "", "Argument[0]", "Argument[1]", "taint", "manual"]
57+
- ["My.Qltest", "D", false, "Reverse", "(System.Object[])", "", "Argument[0].WithElement", "ReturnValue", "value", "manual"]
58+
- ["My.Qltest", "E", true, "get_MyProp", "()", "", "Argument[this].Field[My.Qltest.E.MyField]", "ReturnValue", "value", "manual"]
59+
- ["My.Qltest", "E", true, "set_MyProp", "(System.Object)", "", "Argument[0]", "Argument[this].Field[My.Qltest.E.MyField]", "value", "manual"]
60+
- ["My.Qltest", "G", false, "GeneratedFlow", "(System.Object)", "", "Argument[0]", "ReturnValue", "value", "generated"]
61+
- ["My.Qltest", "G", false, "GeneratedFlowArgs", "(System.Object,System.Object)", "", "Argument[0]", "ReturnValue", "value", "generated"]
62+
- ["My.Qltest", "G", false, "GeneratedFlowArgs", "(System.Object,System.Object)", "", "Argument[1]", "ReturnValue", "value", "generated"]
63+
- ["My.Qltest", "G", false, "MixedFlowArgs", "(System.Object,System.Object)", "", "Argument[0]", "ReturnValue", "value", "generated"]
64+
- ["My.Qltest", "G", false, "MixedFlowArgs", "(System.Object,System.Object)", "", "Argument[1]", "ReturnValue", "value", "manual"]
65+
66+
# Summaries relevant for the Steps testcase.
67+
- addsTo:
68+
pack: codeql/csharp-all
69+
extensible: extSummaryModel
70+
# "namespace", "type", "overrides", "name", "signature", "ext", "inputspec", "outputspec", "kind", "provenance"
71+
data:
72+
- ["My.Qltest", "C", false, "StepArgRes", "(System.Object)", "", "Argument[0]", "ReturnValue", "taint", "manual"]
73+
- ["My.Qltest", "C", false, "StepArgArg", "(System.Object,System.Object)", "", "Argument[0]", "Argument[1]", "taint", "manual"]
74+
- ["My.Qltest", "C", false, "StepArgQual", "(System.Object)", "", "Argument[0]", "Argument[this]", "taint", "manual"]
75+
- ["My.Qltest", "C", false, "StepQualRes", "()", "", "Argument[this]", "ReturnValue", "taint", "manual"]
76+
- ["My.Qltest", "C", false, "StepQualArg", "(System.Object)", "", "Argument[this]", "Argument[0]", "taint", "manual"]
77+
- ["My.Qltest", "C", false, "StepFieldGetter", "()", "", "Argument[this].Field[My.Qltest.C.Field]", "ReturnValue", "value", "manual"]
78+
- ["My.Qltest", "C", false, "StepFieldSetter", "(System.Int32)", "", "Argument[0]", "Argument[this].Field[My.Qltest.C.Field]", "value", "manual"]
79+
- ["My.Qltest", "C", false, "StepPropertyGetter", "()", "", "Argument[this].Property[My.Qltest.C.Property]", "ReturnValue", "value", "manual"]
80+
- ["My.Qltest", "C", false, "StepPropertySetter", "(System.Int32)", "", "Argument[0]", "Argument[this].Property[My.Qltest.C.Property]", "value", "manual"]
81+
- ["My.Qltest", "C", false, "StepElementGetter", "()", "", "Argument[this].Element", "ReturnValue", "value", "manual"]
82+
- ["My.Qltest", "C", false, "StepElementSetter", "(System.Int32)", "", "Argument[0]", "Argument[this].Element", "value", "manual"]
83+
- ["My.Qltest", "C+Generic<,>", false, "StepGeneric", "(T)", "", "Argument[0]", "ReturnValue", "value", "manual"]
84+
- ["My.Qltest", "C+Generic<,>", false, "StepGeneric2<>", "(S)", "", "Argument[0]", "ReturnValue", "value", "manual"]
85+
- ["My.Qltest", "C+Base<>", true, "StepOverride", "(T)", "", "Argument[0]", "ReturnValue", "value", "manual"]

csharp/ql/test/library-tests/dataflow/external-models/sinks.ql

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,21 +2,6 @@ import csharp
22
import DataFlow
33
import semmle.code.csharp.dataflow.ExternalFlow
44
import CsvValidation
5-
import semmle.code.csharp.dataflow.internal.FlowSummaryImpl as FlowSummaryImpl
6-
7-
class SinkModelTest extends SinkModelCsv {
8-
override predicate row(string row) {
9-
row =
10-
[
11-
//"namespace;type;overrides;name;signature;ext;spec;kind;provenance",
12-
"My.Qltest;B;false;Sink1;(System.Object);;Argument[0];code;manual",
13-
"My.Qltest;B;false;SinkMethod;();;ReturnValue;xss;manual",
14-
"My.Qltest;SinkAttribute;false;;;Attribute;ReturnValue;html;manual",
15-
"My.Qltest;SinkAttribute;false;;;Attribute;Argument;remote;manual",
16-
"My.Qltest;SinkAttribute;false;;;Attribute;;sql;manual"
17-
]
18-
}
19-
}
205

216
from DataFlow::Node node, string kind
227
where sinkNode(node, kind)

csharp/ql/test/library-tests/dataflow/external-models/srcs.ql

Lines changed: 0 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -2,30 +2,6 @@ import csharp
22
import DataFlow
33
import semmle.code.csharp.dataflow.ExternalFlow
44
import CsvValidation
5-
import semmle.code.csharp.dataflow.internal.FlowSummaryImpl as FlowSummaryImpl
6-
7-
class SourceModelTest extends SourceModelCsv {
8-
override predicate row(string row) {
9-
row =
10-
[
11-
//"namespace;type;overrides;name;signature;ext;spec;kind;provenance",
12-
"My.Qltest;A;false;Src1;();;ReturnValue;local;manual",
13-
"My.Qltest;A;false;Src1;(System.String);;ReturnValue;local;manual",
14-
"My.Qltest;A;false;Src1;;;ReturnValue;local;manual",
15-
"My.Qltest;A;false;Src2;();;ReturnValue;local;manual",
16-
"My.Qltest;A;false;Src3;();;ReturnValue;local;manual",
17-
"My.Qltest;A;true;Src2;();;ReturnValue;local;manual",
18-
"My.Qltest;A;true;Src3;();;ReturnValue;local;manual",
19-
"My.Qltest;A;false;SrcArg;(System.Object);;Argument[0];local;manual",
20-
"My.Qltest;A;false;SrcArg;(System.Object);;Argument;local;manual",
21-
"My.Qltest;A;true;SrcParam;(System.Object);;Parameter[0];local;manual",
22-
"My.Qltest;SourceAttribute;false;;;Attribute;ReturnValue;local;manual",
23-
"My.Qltest;SourceAttribute;false;;;Attribute;Parameter;local;manual",
24-
"My.Qltest;SourceAttribute;false;;;Attribute;;local;manual",
25-
"My.Qltest;A;false;SrcTwoArg;(System.String,System.String);;ReturnValue;local;manual"
26-
]
27-
}
28-
}
295

306
from DataFlow::Node node, string kind
317
where sourceNode(node, kind)

csharp/ql/test/library-tests/dataflow/external-models/steps.ql

Lines changed: 10 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -6,47 +6,30 @@ import semmle.code.csharp.dataflow.FlowSummary
66
import semmle.code.csharp.dataflow.internal.DataFlowDispatch as DataFlowDispatch
77
import semmle.code.csharp.dataflow.internal.FlowSummaryImpl as FlowSummaryImpl
88

9-
private class SummaryModelTest extends SummaryModelCsv {
10-
override predicate row(string row) {
11-
row =
12-
[
13-
//"namespace;type;overrides;name;signature;ext;inputspec;outputspec;kind;provenance",
14-
"My.Qltest;C;false;StepArgRes;(System.Object);;Argument[0];ReturnValue;taint;manual",
15-
"My.Qltest;C;false;StepArgArg;(System.Object,System.Object);;Argument[0];Argument[1];taint;manual",
16-
"My.Qltest;C;false;StepArgQual;(System.Object);;Argument[0];Argument[this];taint;manual",
17-
"My.Qltest;C;false;StepQualRes;();;Argument[this];ReturnValue;taint;manual",
18-
"My.Qltest;C;false;StepQualArg;(System.Object);;Argument[this];Argument[0];taint;manual",
19-
"My.Qltest;C;false;StepFieldGetter;();;Argument[this].Field[My.Qltest.C.Field];ReturnValue;value;manual",
20-
"My.Qltest;C;false;StepFieldSetter;(System.Int32);;Argument[0];Argument[this].Field[My.Qltest.C.Field];value;manual",
21-
"My.Qltest;C;false;StepPropertyGetter;();;Argument[this].Property[My.Qltest.C.Property];ReturnValue;value;manual",
22-
"My.Qltest;C;false;StepPropertySetter;(System.Int32);;Argument[0];Argument[this].Property[My.Qltest.C.Property];value;manual",
23-
"My.Qltest;C;false;StepElementGetter;();;Argument[this].Element;ReturnValue;value;manual",
24-
"My.Qltest;C;false;StepElementSetter;(System.Int32);;Argument[0];Argument[this].Element;value;manual",
25-
"My.Qltest;C+Generic<,>;false;StepGeneric;(T);;Argument[0];ReturnValue;value;manual",
26-
"My.Qltest;C+Generic<,>;false;StepGeneric2<>;(S);;Argument[0];ReturnValue;value;manual",
27-
"My.Qltest;C+Base<>;true;StepOverride;(T);;Argument[0];ReturnValue;value;manual"
28-
]
29-
}
9+
private SummarizedCallable getRelevantSummarizedCallable() {
10+
exists(SummarizedCallable sc |
11+
sc.getDeclaringType*().getName() = "C" and
12+
sc instanceof DataFlowDispatch::DataFlowSummarizedCallable and
13+
result = sc
14+
)
3015
}
3116

3217
query predicate summaryThroughStep(
3318
DataFlow::Node node1, DataFlow::Node node2, boolean preservesValue
3419
) {
3520
FlowSummaryImpl::Private::Steps::summaryThroughStepValue(node1, node2,
36-
any(DataFlowDispatch::DataFlowSummarizedCallable sc)) and
21+
getRelevantSummarizedCallable()) and
3722
preservesValue = true
3823
or
3924
FlowSummaryImpl::Private::Steps::summaryThroughStepTaint(node1, node2,
40-
any(DataFlowDispatch::DataFlowSummarizedCallable sc)) and
25+
getRelevantSummarizedCallable()) and
4126
preservesValue = false
4227
}
4328

4429
query predicate summaryGetterStep(DataFlow::Node arg, DataFlow::Node out, Content c) {
45-
FlowSummaryImpl::Private::Steps::summaryGetterStep(arg, c, out,
46-
any(DataFlowDispatch::DataFlowSummarizedCallable sc))
30+
FlowSummaryImpl::Private::Steps::summaryGetterStep(arg, c, out, getRelevantSummarizedCallable())
4731
}
4832

4933
query predicate summarySetterStep(DataFlow::Node arg, DataFlow::Node out, Content c) {
50-
FlowSummaryImpl::Private::Steps::summarySetterStep(arg, c, out,
51-
any(DataFlowDispatch::DataFlowSummarizedCallable sc))
34+
FlowSummaryImpl::Private::Steps::summarySetterStep(arg, c, out, getRelevantSummarizedCallable())
5235
}

csharp/ql/test/qlpack.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,6 @@ dependencies:
44
codeql/csharp-all: ${workspace}
55
codeql/csharp-queries: ${workspace}
66
extractor: csharp
7+
dataExtensions:
8+
- library-tests/dataflow/external-models/ext/*.model.yml
79
tests: .

0 commit comments

Comments
 (0)