Skip to content

Commit 19d29f6

Browse files
committed
Revise server and topology event classes and tests
Use phongo_objectid_init in getTopologyId() methods. Report topologyId as an ObjectId in debug info. Report TopologyDescription servers as ServerDescription in debug info. Copy parameters in phongo_serverdescription_init and phongo_topologydescription_init for consistency with other functions (e.g. phongo_readconcern_init). This also creates phongo_serverdescription_init_ex for when we want to skip copying in Server::getServerDescription(). PHPC-1953: Add tests for debug handlers PHPC-1959: Utilize Manager::addSubscriber() in tests Skip TopologyClosedEvent test (pending PHPC-2023)
1 parent c60a6dc commit 19d29f6

28 files changed

+449
-396
lines changed

php_phongo.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -358,14 +358,14 @@ void phongo_server_init(zval* return_value, zval* manager, uint32_t server_id) /
358358
}
359359
/* }}} */
360360

361-
void phongo_serverdescription_init(zval* return_value, mongoc_server_description_t* server_description) /* {{{ */
361+
void phongo_serverdescription_init_ex(zval* return_value, mongoc_server_description_t* server_description, bool copy) /* {{{ */
362362
{
363363
php_phongo_serverdescription_t* intern;
364364

365365
object_init_ex(return_value, php_phongo_serverdescription_ce);
366366

367367
intern = Z_SERVERDESCRIPTION_OBJ_P(return_value);
368-
intern->server_description = server_description;
368+
intern->server_description = copy ? mongoc_server_description_new_copy(server_description) : server_description;
369369
}
370370
/* }}} */
371371

@@ -401,7 +401,7 @@ void phongo_topologydescription_init(zval* return_value, mongoc_topology_descrip
401401
object_init_ex(return_value, php_phongo_topologydescription_ce);
402402

403403
intern = Z_TOPOLOGYDESCRIPTION_OBJ_P(return_value);
404-
intern->topology_description = topology_description;
404+
intern->topology_description = mongoc_topology_description_new_copy(topology_description);
405405
}
406406
/* }}} */
407407

php_phongo.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -117,10 +117,12 @@ zend_object_handlers* phongo_get_std_object_handlers(void);
117117

118118
void phongo_clientencryption_init(php_phongo_clientencryption_t* ce_obj, zval* manager, zval* options);
119119
void phongo_server_init(zval* return_value, zval* manager, uint32_t server_id);
120-
void phongo_serverdescription_init(zval* return_value, mongoc_server_description_t* serverDescription);
120+
void phongo_serverdescription_init(zval* return_value, mongoc_server_description_t* server_description);
121+
void phongo_serverdescription_init_ex(zval* return_value, mongoc_server_description_t* sd, bool copy);
122+
#define phongo_serverdescription_init(r, sd) phongo_serverdescription_init_ex((r), (sd), true)
121123
void phongo_session_init(zval* return_value, zval* manager, mongoc_client_session_t* client_session);
122124
void phongo_objectid_init(zval* return_value, const bson_oid_t* oid);
123-
void phongo_topologydescription_init(zval* return_value, mongoc_topology_description_t* topologyDescription);
125+
void phongo_topologydescription_init(zval* return_value, mongoc_topology_description_t* topology_description);
124126
void phongo_readconcern_init(zval* return_value, const mongoc_read_concern_t* read_concern);
125127
void phongo_readpreference_init(zval* return_value, const mongoc_read_prefs_t* read_prefs);
126128
void phongo_writeconcern_init(zval* return_value, const mongoc_write_concern_t* write_concern);

src/MongoDB/Monitoring/ServerChangedEvent.c

Lines changed: 14 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -52,44 +52,33 @@ static PHP_METHOD(ServerChangedEvent, getPort)
5252
Returns this event's new description */
5353
static PHP_METHOD(ServerChangedEvent, getNewDescription)
5454
{
55-
mongoc_server_description_t* server_description;
5655
php_phongo_serverchangedevent_t* intern = Z_SERVERCHANGEDEVENT_OBJ_P(getThis());
5756

5857
PHONGO_PARSE_PARAMETERS_NONE();
5958

60-
server_description = mongoc_server_description_new_copy(intern->new_server_description);
61-
62-
phongo_serverdescription_init(return_value, server_description);
59+
phongo_serverdescription_init(return_value, intern->new_server_description);
6360
} /* }}} */
6461

6562
/* {{{ proto MongoDB\Driver\ServerDescription ServerChangedEvent::getPreviousDescription()
6663
Returns this event's previous description */
6764
static PHP_METHOD(ServerChangedEvent, getPreviousDescription)
6865
{
69-
mongoc_server_description_t* server_description;
7066
php_phongo_serverchangedevent_t* intern = Z_SERVERCHANGEDEVENT_OBJ_P(getThis());
7167

7268
PHONGO_PARSE_PARAMETERS_NONE();
7369

74-
server_description = mongoc_server_description_new_copy(intern->old_server_description);
75-
76-
phongo_serverdescription_init(return_value, server_description);
70+
phongo_serverdescription_init(return_value, intern->old_server_description);
7771
} /* }}} */
7872

7973
/* {{{ proto MongoDB\BSON\ObjectId ServerChangedEvent::getTopologyId()
8074
Returns this event's topology id */
8175
static PHP_METHOD(ServerChangedEvent, getTopologyId)
8276
{
83-
php_phongo_objectid_t* topology_id;
8477
php_phongo_serverchangedevent_t* intern = Z_SERVERCHANGEDEVENT_OBJ_P(getThis());
8578

8679
PHONGO_PARSE_PARAMETERS_NONE();
8780

88-
object_init_ex(return_value, php_phongo_objectid_ce);
89-
90-
topology_id = Z_OBJECTID_OBJ_P(return_value);
91-
bson_oid_to_string(&intern->topology_id, topology_id->oid);
92-
topology_id->initialized = true;
81+
phongo_objectid_init(return_value, &intern->topology_id);
9382
} /* }}} */
9483

9584
/* {{{ MongoDB\Driver\Monitoring\ServerChangedEvent function entries */
@@ -146,7 +135,6 @@ static HashTable* php_phongo_serverchangedevent_get_debug_info(phongo_compat_obj
146135
{
147136
php_phongo_serverchangedevent_t* intern;
148137
zval retval = ZVAL_STATIC_INIT;
149-
char topology_id[25];
150138

151139
intern = Z_OBJ_SERVERCHANGEDEVENT(PHONGO_COMPAT_GET_OBJ(object));
152140
*is_temp = 1;
@@ -155,19 +143,22 @@ static HashTable* php_phongo_serverchangedevent_get_debug_info(phongo_compat_obj
155143
ADD_ASSOC_STRING(&retval, "host", intern->host);
156144
ADD_ASSOC_LONG_EX(&retval, "port", intern->port);
157145

158-
bson_oid_to_string(&intern->topology_id, topology_id);
159-
ADD_ASSOC_STRING(&retval, "topologyId", topology_id);
146+
{
147+
zval topology_id;
148+
phongo_objectid_init(&topology_id, &intern->topology_id);
149+
ADD_ASSOC_ZVAL_EX(&retval, "topologyId", &topology_id);
150+
}
160151

161152
{
162-
zval new_server_description;
163-
php_phongo_server_description_to_zval(&new_server_description, intern->new_server_description);
164-
ADD_ASSOC_ZVAL_EX(&retval, "newServerDescription", &new_server_description);
153+
zval new_sd;
154+
phongo_serverdescription_init(&new_sd, intern->new_server_description);
155+
ADD_ASSOC_ZVAL_EX(&retval, "newDescription", &new_sd);
165156
}
166157

167158
{
168-
zval old_server_description;
169-
php_phongo_server_description_to_zval(&old_server_description, intern->old_server_description);
170-
ADD_ASSOC_ZVAL_EX(&retval, "oldServerDescription", &old_server_description);
159+
zval old_sd;
160+
phongo_serverdescription_init(&old_sd, intern->old_server_description);
161+
ADD_ASSOC_ZVAL_EX(&retval, "oldDescription", &old_sd);
171162
}
172163

173164
return Z_ARRVAL(retval);

src/MongoDB/Monitoring/ServerClosedEvent.c

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -52,16 +52,11 @@ static PHP_METHOD(ServerClosedEvent, getPort)
5252
Returns this event's topology id */
5353
static PHP_METHOD(ServerClosedEvent, getTopologyId)
5454
{
55-
php_phongo_objectid_t* topology_id;
5655
php_phongo_serverclosedevent_t* intern = Z_SERVERCLOSEDEVENT_OBJ_P(getThis());
5756

5857
PHONGO_PARSE_PARAMETERS_NONE();
5958

60-
object_init_ex(return_value, php_phongo_objectid_ce);
61-
62-
topology_id = Z_OBJECTID_OBJ_P(return_value);
63-
bson_oid_to_string(&intern->topology_id, topology_id->oid);
64-
topology_id->initialized = true;
59+
phongo_objectid_init(return_value, &intern->topology_id);
6560
} /* }}} */
6661

6762
/* {{{ MongoDB\Driver\Monitoring\ServerClosedEvent function entries */
@@ -108,7 +103,6 @@ static HashTable* php_phongo_serverclosedevent_get_debug_info(phongo_compat_obje
108103
{
109104
php_phongo_serverclosedevent_t* intern;
110105
zval retval = ZVAL_STATIC_INIT;
111-
char topology_id[25];
112106

113107
intern = Z_OBJ_SERVERCLOSEDEVENT(PHONGO_COMPAT_GET_OBJ(object));
114108
*is_temp = 1;
@@ -117,8 +111,11 @@ static HashTable* php_phongo_serverclosedevent_get_debug_info(phongo_compat_obje
117111
ADD_ASSOC_STRING(&retval, "host", intern->host);
118112
ADD_ASSOC_LONG_EX(&retval, "port", intern->port);
119113

120-
bson_oid_to_string(&intern->topology_id, topology_id);
121-
ADD_ASSOC_STRING(&retval, "topologyId", topology_id);
114+
{
115+
zval topology_id;
116+
phongo_objectid_init(&topology_id, &intern->topology_id);
117+
ADD_ASSOC_ZVAL_EX(&retval, "topologyId", &topology_id);
118+
}
122119

123120
return Z_ARRVAL(retval);
124121
} /* }}} */

src/MongoDB/Monitoring/ServerOpeningEvent.c

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -52,16 +52,11 @@ static PHP_METHOD(ServerOpeningEvent, getPort)
5252
Returns this event's topology id */
5353
static PHP_METHOD(ServerOpeningEvent, getTopologyId)
5454
{
55-
php_phongo_objectid_t* topology_id;
5655
php_phongo_serveropeningevent_t* intern = Z_SERVEROPENINGEVENT_OBJ_P(getThis());
5756

5857
PHONGO_PARSE_PARAMETERS_NONE();
5958

60-
object_init_ex(return_value, php_phongo_objectid_ce);
61-
62-
topology_id = Z_OBJECTID_OBJ_P(return_value);
63-
bson_oid_to_string(&intern->topology_id, topology_id->oid);
64-
topology_id->initialized = true;
59+
phongo_objectid_init(return_value, &intern->topology_id);
6560
} /* }}} */
6661

6762
/* {{{ MongoDB\Driver\Monitoring\ServerOpeningEvent function entries */
@@ -108,7 +103,6 @@ static HashTable* php_phongo_serveropeningevent_get_debug_info(phongo_compat_obj
108103
{
109104
php_phongo_serveropeningevent_t* intern;
110105
zval retval = ZVAL_STATIC_INIT;
111-
char topology_id[25];
112106

113107
intern = Z_OBJ_SERVEROPENINGEVENT(PHONGO_COMPAT_GET_OBJ(object));
114108
*is_temp = 1;
@@ -117,8 +111,11 @@ static HashTable* php_phongo_serveropeningevent_get_debug_info(phongo_compat_obj
117111
ADD_ASSOC_STRING(&retval, "host", intern->host);
118112
ADD_ASSOC_LONG_EX(&retval, "port", intern->port);
119113

120-
bson_oid_to_string(&intern->topology_id, topology_id);
121-
ADD_ASSOC_STRING(&retval, "topologyId", topology_id);
114+
{
115+
zval topology_id;
116+
phongo_objectid_init(&topology_id, &intern->topology_id);
117+
ADD_ASSOC_ZVAL_EX(&retval, "topologyId", &topology_id);
118+
}
122119

123120
return Z_ARRVAL(retval);
124121
} /* }}} */

src/MongoDB/Monitoring/TopologyChangedEvent.c

Lines changed: 14 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -30,44 +30,33 @@ zend_class_entry* php_phongo_topologychangedevent_ce;
3030
Returns this event's new description */
3131
static PHP_METHOD(TopologyChangedEvent, getNewDescription)
3232
{
33-
mongoc_topology_description_t* topology_description;
3433
php_phongo_topologychangedevent_t* intern = Z_TOPOLOGYCHANGEDEVENT_OBJ_P(getThis());
3534

3635
PHONGO_PARSE_PARAMETERS_NONE();
3736

38-
topology_description = mongoc_topology_description_new_copy(intern->new_topology_description);
39-
40-
phongo_topologydescription_init(return_value, topology_description);
37+
phongo_topologydescription_init(return_value, intern->new_topology_description);
4138
} /* }}} */
4239

4340
/* {{{ proto MongoDB\Driver\TopologyDescription TopologyChangedEvent::getPreviousDescription()
4441
Returns this event's previous description */
4542
static PHP_METHOD(TopologyChangedEvent, getPreviousDescription)
4643
{
47-
mongoc_topology_description_t* topology_description;
4844
php_phongo_topologychangedevent_t* intern = Z_TOPOLOGYCHANGEDEVENT_OBJ_P(getThis());
4945

5046
PHONGO_PARSE_PARAMETERS_NONE();
5147

52-
topology_description = mongoc_topology_description_new_copy(intern->old_topology_description);
53-
54-
phongo_topologydescription_init(return_value, topology_description);
48+
phongo_topologydescription_init(return_value, intern->old_topology_description);
5549
} /* }}} */
5650

5751
/* {{{ proto MongoDB\BSON\ObjectId TopologyChangedEvent::getTopologyId()
5852
Returns this event's topology id */
5953
static PHP_METHOD(TopologyChangedEvent, getTopologyId)
6054
{
61-
php_phongo_objectid_t* topology_id;
6255
php_phongo_topologychangedevent_t* intern = Z_TOPOLOGYCHANGEDEVENT_OBJ_P(getThis());
6356

6457
PHONGO_PARSE_PARAMETERS_NONE();
6558

66-
object_init_ex(return_value, php_phongo_objectid_ce);
67-
68-
topology_id = Z_OBJECTID_OBJ_P(return_value);
69-
bson_oid_to_string(&intern->topology_id, topology_id->oid);
70-
topology_id->initialized = true;
59+
phongo_objectid_init(return_value, &intern->topology_id);
7160
} /* }}} */
7261

7362
/* {{{ MongoDB\Driver\Monitoring\TopologyChangedEvent function entries */
@@ -122,25 +111,27 @@ static HashTable* php_phongo_topologychangedevent_get_debug_info(phongo_compat_o
122111
{
123112
php_phongo_topologychangedevent_t* intern;
124113
zval retval = ZVAL_STATIC_INIT;
125-
char topology_id[25];
126114

127115
intern = Z_OBJ_TOPOLOGYCHANGEDEVENT(PHONGO_COMPAT_GET_OBJ(object));
128116
*is_temp = 1;
129117
array_init_size(&retval, 3);
130118

131-
bson_oid_to_string(&intern->topology_id, topology_id);
132-
ADD_ASSOC_STRING(&retval, "topologyId", topology_id);
119+
{
120+
zval topology_id;
121+
phongo_objectid_init(&topology_id, &intern->topology_id);
122+
ADD_ASSOC_ZVAL_EX(&retval, "topologyId", &topology_id);
123+
}
133124

134125
{
135-
zval new_topology_description;
136-
php_phongo_topology_description_to_zval(&new_topology_description, intern->new_topology_description);
137-
ADD_ASSOC_ZVAL_EX(&retval, "newTopologyDescription", &new_topology_description);
126+
zval new_td;
127+
phongo_topologydescription_init(&new_td, intern->new_topology_description);
128+
ADD_ASSOC_ZVAL_EX(&retval, "newDescription", &new_td);
138129
}
139130

140131
{
141-
zval old_topology_description;
142-
php_phongo_topology_description_to_zval(&old_topology_description, intern->old_topology_description);
143-
ADD_ASSOC_ZVAL_EX(&retval, "oldTopologyDescription", &old_topology_description);
132+
zval old_td;
133+
phongo_topologydescription_init(&old_td, intern->old_topology_description);
134+
ADD_ASSOC_ZVAL_EX(&retval, "oldDescription", &old_td);
144135
}
145136

146137
return Z_ARRVAL(retval);
@@ -150,8 +141,6 @@ static HashTable* php_phongo_topologychangedevent_get_debug_info(phongo_compat_o
150141
void php_phongo_topologychangedevent_init_ce(INIT_FUNC_ARGS) /* {{{ */
151142
{
152143
zend_class_entry ce;
153-
(void) type;
154-
(void) module_number;
155144

156145
INIT_NS_CLASS_ENTRY(ce, "MongoDB\\Driver\\Monitoring", "TopologyChangedEvent", php_phongo_topologychangedevent_me);
157146
php_phongo_topologychangedevent_ce = zend_register_internal_class(&ce);
@@ -163,8 +152,6 @@ void php_phongo_topologychangedevent_init_ce(INIT_FUNC_ARGS) /* {{{ */
163152
php_phongo_handler_topologychangedevent.get_debug_info = php_phongo_topologychangedevent_get_debug_info;
164153
php_phongo_handler_topologychangedevent.free_obj = php_phongo_topologychangedevent_free_object;
165154
php_phongo_handler_topologychangedevent.offset = XtOffsetOf(php_phongo_topologychangedevent_t, std);
166-
167-
return;
168155
} /* }}} */
169156

170157
/*

src/MongoDB/Monitoring/TopologyClosedEvent.c

Lines changed: 6 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -30,16 +30,11 @@ zend_class_entry* php_phongo_topologyclosedevent_ce;
3030
Returns this event's topology id */
3131
static PHP_METHOD(TopologyClosedEvent, getTopologyId)
3232
{
33-
php_phongo_objectid_t* topology_id;
3433
php_phongo_topologyclosedevent_t* intern = Z_TOPOLOGYCLOSEDEVENT_OBJ_P(getThis());
3534

3635
PHONGO_PARSE_PARAMETERS_NONE();
3736

38-
object_init_ex(return_value, php_phongo_objectid_ce);
39-
40-
topology_id = Z_OBJECTID_OBJ_P(return_value);
41-
bson_oid_to_string(&intern->topology_id, topology_id->oid);
42-
topology_id->initialized = true;
37+
phongo_objectid_init(return_value, &intern->topology_id);
4338
} /* }}} */
4439

4540
/* {{{ MongoDB\Driver\Monitoring\TopologyClosedEvent function entries */
@@ -84,14 +79,16 @@ static HashTable* php_phongo_topologyclosedevent_get_debug_info(phongo_compat_ob
8479
{
8580
php_phongo_topologyclosedevent_t* intern;
8681
zval retval = ZVAL_STATIC_INIT;
87-
char topology_id[25];
8882

8983
intern = Z_OBJ_TOPOLOGYCLOSEDEVENT(PHONGO_COMPAT_GET_OBJ(object));
9084
*is_temp = 1;
9185
array_init_size(&retval, 1);
9286

93-
bson_oid_to_string(&intern->topology_id, topology_id);
94-
ADD_ASSOC_STRING(&retval, "topologyId", topology_id);
87+
{
88+
zval topology_id;
89+
phongo_objectid_init(&topology_id, &intern->topology_id);
90+
ADD_ASSOC_ZVAL_EX(&retval, "topologyId", &topology_id);
91+
}
9592

9693
return Z_ARRVAL(retval);
9794
} /* }}} */
@@ -100,8 +97,6 @@ static HashTable* php_phongo_topologyclosedevent_get_debug_info(phongo_compat_ob
10097
void php_phongo_topologyclosedevent_init_ce(INIT_FUNC_ARGS) /* {{{ */
10198
{
10299
zend_class_entry ce;
103-
(void) type;
104-
(void) module_number;
105100

106101
INIT_NS_CLASS_ENTRY(ce, "MongoDB\\Driver\\Monitoring", "TopologyClosedEvent", php_phongo_topologyclosedevent_me);
107102
php_phongo_topologyclosedevent_ce = zend_register_internal_class(&ce);
@@ -113,8 +108,6 @@ void php_phongo_topologyclosedevent_init_ce(INIT_FUNC_ARGS) /* {{{ */
113108
php_phongo_handler_topologyclosedevent.get_debug_info = php_phongo_topologyclosedevent_get_debug_info;
114109
php_phongo_handler_topologyclosedevent.free_obj = php_phongo_topologyclosedevent_free_object;
115110
php_phongo_handler_topologyclosedevent.offset = XtOffsetOf(php_phongo_topologyclosedevent_t, std);
116-
117-
return;
118111
} /* }}} */
119112

120113
/*

0 commit comments

Comments
 (0)