instana 1.209.7 → 1.209.8

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7ad727e388d233521b7837cfc0157cd6b5af54f307529ad5e58207894d6863de
4
- data.tar.gz: 9fb40e5a5769d996195f076475c2ef5d67182e245e549cf14970dcc0779d6014
3
+ metadata.gz: 1461b6f3821df0472c4d486c1256069909ed6c833e8016e70e06d14130124704
4
+ data.tar.gz: 4f6d244e93cd9bdf2b1e3aa895d8824df136123f46a829a02059d4f82c3d0a75
5
5
  SHA512:
6
- metadata.gz: 0f9e58d31701ffd88af39ff5ac25e7c87a443153122a63b6e319e04c545d3926318d4c5862b8a628a215325f6f873d26852eb426440ceaa19746c4c80e9d19e6
7
- data.tar.gz: d83ea081e9721634bcbf0aff97b1fc67f78fdcfabe52bfbeda95f20fc144c017e16d137f74d02a54f9a0adbb028916c5a62596b7af2a7cb51a80880d0fc79f99
6
+ metadata.gz: 7533b3a686d6f432cfad515c4625b687c4d14d593acc15bde81bae500d1c170582ebaea43a4527807d68f1e70397ede59e0659c3898f1ecaba5c8311095b0110
7
+ data.tar.gz: 55e6433ff8f6eb247ef63d1b9d8321e4c82aefd94c8838347bdae07fbac6d3d01903a60db6df32b36430bc351b375f5a8e1630a1d34adf15053dcb28152d71de
@@ -63,7 +63,20 @@ module Instana
63
63
  return [] unless parent.respond_to?(method)
64
64
 
65
65
  parent.send(method).map do |field|
66
- [{object: parent.name, field: field.name}] + walk_fields(field, method)
66
+ # Certain types like GraphQL::Language::Nodes::InlineFragment
67
+ # have no "name" instance variable defined,
68
+ # in such case we use the class's name
69
+ parent_name = if parent.instance_variable_defined?(:@name)
70
+ parent.name
71
+ else
72
+ parent.class.name.split('::').last
73
+ end
74
+ field_name = if field.instance_variable_defined?(:@name)
75
+ field.name
76
+ else
77
+ field.class.name.split('::').last
78
+ end
79
+ [{object: parent_name, field: field_name}] + walk_fields(field, method)
67
80
  end.flatten
68
81
  end
69
82
 
@@ -2,6 +2,6 @@
2
2
  # (c) Copyright Instana Inc. 2016
3
3
 
4
4
  module Instana
5
- VERSION = "1.209.7"
5
+ VERSION = "1.209.8"
6
6
  VERSION_FULL = "instana-#{VERSION}"
7
7
  end
@@ -8,84 +8,213 @@ class GraphqlTest < Minitest::Test
8
8
  field :id, ID, null: false
9
9
  field :action, String, null: false
10
10
  end
11
-
11
+
12
+ class JobType < GraphQL::Schema::Object
13
+ field :id, ID, null: false
14
+ field :name, String, null: false
15
+ field :description, String, null: false
16
+ end
17
+
18
+ class TaskJobUnion < GraphQL::Schema::Union
19
+ description "A union type for Task and Job"
20
+ possible_types TaskType, JobType
21
+
22
+ def self.resolve_type(object, _context)
23
+ if !object.action.nil?
24
+ TaskType
25
+ elsif !object.description?
26
+ JobType
27
+ else
28
+ raise("Unexpected object: #{object}")
29
+ end
30
+ end
31
+ end
32
+
12
33
  class NewTaskType < GraphQL::Schema::Mutation
13
34
  argument :action, String, required: true
14
35
  field :task, TaskType, null: true
15
-
36
+
16
37
  def resolve(action:)
17
38
  {
18
39
  task: OpenStruct.new(id: '0', action: action)
19
40
  }
20
41
  end
21
42
  end
22
-
43
+
23
44
  class QueryType < GraphQL::Schema::Object
24
45
  field :tasks, TaskType.connection_type, null: false
25
-
46
+ field :jobs, JobType.connection_type, null: false
47
+ field :tasksorjobs, TaskJobUnion.connection_type, null: false
48
+
26
49
  def tasks()
27
50
  [
28
- OpenStruct.new(id: '0', action: 'Sample')
51
+ OpenStruct.new(id: '0', action: 'Sample 00'),
52
+ OpenStruct.new(id: '1', action: 'Sample 01'),
53
+ OpenStruct.new(id: '2', action: 'Sample 02'),
54
+ OpenStruct.new(id: '3', action: 'Sample 03'),
55
+ OpenStruct.new(id: '4', action: 'Sample 04')
56
+ ]
57
+ end
58
+
59
+ def jobs()
60
+ [
61
+ OpenStruct.new(id: '0', name: 'Name 00', description: 'Desc 00'),
62
+ OpenStruct.new(id: '1', name: 'Name 01', description: 'Desc 01'),
63
+ OpenStruct.new(id: '2', name: 'Name 02', description: 'Desc 02'),
64
+ OpenStruct.new(id: '3', name: 'Name 03', description: 'Desc 03'),
65
+ OpenStruct.new(id: '4', name: 'Name 04', description: 'Desc 04')
66
+ ]
67
+ end
68
+
69
+ def tasksorjobs()
70
+ [
71
+ OpenStruct.new(id: '0', action: 'Task 00'),
72
+ OpenStruct.new(id: '0', name: 'Job 00', description: 'Job Desc 00')
29
73
  ]
30
74
  end
31
75
  end
32
-
76
+
33
77
  class MutationType < GraphQL::Schema::Object
34
78
  field :create_task, mutation: NewTaskType
35
79
  end
36
-
80
+
37
81
  class Schema < GraphQL::Schema
38
82
  query QueryType
39
83
  mutation MutationType
40
84
  end
41
-
85
+
42
86
  def test_it_works
43
87
  assert defined?(GraphQL)
44
88
  end
45
-
46
- def test_config_defaults
89
+
90
+ def test_config_defaults
47
91
  assert ::Instana.config[:graphql].is_a?(Hash)
48
92
  assert ::Instana.config[:graphql].key?(:enabled)
49
93
  assert_equal true, ::Instana.config[:graphql][:enabled]
50
94
  end
51
-
95
+
52
96
  def test_query
53
97
  clear_all!
54
-
55
- query = "query Sample {
56
- tasks(after: \"\", first: 10) {
98
+
99
+ query = "query FirstTwoTaskSamples {
100
+ tasks(after: \"\", first: 2) {
57
101
  nodes {
58
102
  action
59
103
  }
60
104
  }
61
105
  }"
62
-
106
+
63
107
  expected_data = {
64
- :operationName => "Sample",
108
+ :operationName => "FirstTwoTaskSamples",
65
109
  :operationType => "query",
66
110
  :arguments => { "tasks" => ["after", "first"] },
67
111
  :fields => { "tasks" => ["nodes"], "nodes" => ["action"] }
68
112
  }
69
113
  expected_results = {
70
114
  "data" => {
71
- "tasks" => {
72
- "nodes" => [{ "action" => "Sample" }]
115
+ "tasks" => {
116
+ "nodes" => [{"action" => "Sample 00"}, {"action" => "Sample 01"}]
117
+ }
118
+ }
119
+ }
120
+
121
+ results = Instana.tracer.start_or_continue_trace('graphql-test') { Schema.execute(query) }
122
+ query_span, root_span = *Instana.processor.queued_spans
123
+
124
+ assert_equal expected_results, results.to_h
125
+ assert_equal :sdk, root_span[:n]
126
+ assert_equal :'graphql.server', query_span[:n]
127
+ assert_equal expected_data, query_span[:data][:graphql]
128
+ end
129
+
130
+ def test_query_with_fragment
131
+ clear_all!
132
+
133
+ query = "
134
+ fragment actionDetails on Task {
135
+ action
136
+ }
137
+
138
+ query SampleWithFragment {
139
+ tasks {
140
+ nodes {
141
+ ... actionDetails
142
+ }
143
+ }
144
+ }"
145
+
146
+ expected_data = {
147
+ :operationName => "SampleWithFragment",
148
+ :operationType => "query",
149
+ :arguments => {},
150
+ :fields => { "tasks" => ["nodes"], "nodes" => ["actionDetails"] }
151
+ }
152
+ expected_results = {
153
+ "data" => {
154
+ "tasks" => {
155
+ "nodes" => [{"action" => "Sample 00"}, {"action" => "Sample 01"},
156
+ {"action" => "Sample 02"}, {"action" => "Sample 03"},
157
+ {"action" => "Sample 04"}]
73
158
  }
74
159
  }
75
160
  }
76
-
161
+
77
162
  results = Instana.tracer.start_or_continue_trace('graphql-test') { Schema.execute(query) }
78
163
  query_span, root_span = *Instana.processor.queued_spans
79
-
164
+
80
165
  assert_equal expected_results, results.to_h
81
166
  assert_equal :sdk, root_span[:n]
82
167
  assert_equal :'graphql.server', query_span[:n]
83
168
  assert_equal expected_data, query_span[:data][:graphql]
84
169
  end
85
-
170
+
171
+ def test_query_union_with_fragment
172
+ clear_all!
173
+
174
+ query = "
175
+ query QueryUnionWithFragment {
176
+ tasksorjobs {
177
+ nodes {
178
+ ... on Task {
179
+ action
180
+ }
181
+ ... on Job {
182
+ name
183
+ description
184
+ }
185
+ }
186
+ }
187
+ }"
188
+
189
+ expected_data = {
190
+ :operationName => "QueryUnionWithFragment",
191
+ :operationType => "query",
192
+ :arguments => {},
193
+ :fields => { "tasksorjobs" => ["nodes"],
194
+ "nodes" => ["InlineFragment", "InlineFragment"],
195
+ "InlineFragment" => %w[action name description]}
196
+ }
197
+ expected_results = {
198
+ "data" => {
199
+ "tasksorjobs" => {
200
+ "nodes" => [{"action" => "Task 00"},
201
+ {"name" => "Job 00", "description" => "Job Desc 00"}]
202
+ }
203
+ }
204
+ }
205
+
206
+ results = Instana.tracer.start_or_continue_trace('graphql-test') { Schema.execute(query) }
207
+ query_span, root_span = *Instana.processor.queued_spans
208
+
209
+ assert_equal expected_results, results.to_h
210
+ assert_equal :sdk, root_span[:n]
211
+ assert_equal :'graphql.server', query_span[:n]
212
+ assert_equal expected_data, query_span[:data][:graphql]
213
+ end
214
+
86
215
  def test_mutation
87
216
  clear_all!
88
-
217
+
89
218
  query = "mutation Sample {
90
219
  createTask(action: \"Sample\") {
91
220
  task {
@@ -93,7 +222,7 @@ class GraphqlTest < Minitest::Test
93
222
  }
94
223
  }
95
224
  }"
96
-
225
+
97
226
  expected_data = {
98
227
  :operationName => "Sample",
99
228
  :operationType => "mutation",
@@ -102,15 +231,15 @@ class GraphqlTest < Minitest::Test
102
231
  }
103
232
  expected_results = {
104
233
  "data" => {
105
- "createTask" => {
234
+ "createTask" => {
106
235
  "task" => { "action" => "Sample" }
107
236
  }
108
237
  }
109
238
  }
110
-
239
+
111
240
  results = Instana.tracer.start_or_continue_trace('graphql-test') { Schema.execute(query) }
112
241
  query_span, root_span = *Instana.processor.queued_spans
113
-
242
+
114
243
  assert_equal expected_results, results.to_h
115
244
  assert_equal :sdk, root_span[:n]
116
245
  assert_equal :'graphql.server', query_span[:n]
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: instana
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.209.7
4
+ version: 1.209.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peter Giacomo Lombardo
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-05-24 00:00:00.000000000 Z
11
+ date: 2023-06-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler