@@ -113,6 +113,26 @@ def test_set_plain(self):
113113 res = self .client .write ('/testkey' , 'test' )
114114 self .assertEquals (res , etcd .EtcdResult (** d ))
115115
116+
117+ def test_update (self ):
118+ """Can update a result."""
119+ d = {u'action' : u'set' ,
120+ u'node' : {
121+ u'expiration' : u'2013-09-14T00:56:59.316195568+02:00' ,
122+ u'modifiedIndex' : 6 ,
123+ u'key' : u'/testkey' ,
124+ u'ttl' : 19 ,
125+ u'value' : u'test'
126+ }
127+ }
128+ self ._mock_api (200 ,d )
129+ res = self .client .get ('/testkey' )
130+ res .value = 'ciao'
131+ d ['node' ]['value' ] = 'ciao'
132+ self ._mock_api (200 ,d )
133+ newres = self .client .update (res )
134+ self .assertEquals (newres .value , 'ciao' )
135+
116136 def test_newkey (self ):
117137 """ Can set a new value """
118138 d = {
@@ -130,6 +150,8 @@ def test_newkey(self):
130150 d ['node' ]['newKey' ] = True
131151 self .assertEquals (res , etcd .EtcdResult (** d ))
132152
153+
154+
133155 def test_not_found_response (self ):
134156 """ Can handle server not found response """
135157 self ._mock_api (404 , 'Not found' )
@@ -444,3 +466,25 @@ def test_not_in(self):
444466
445467 def test_in (self ):
446468 pass
469+
470+ def test_update_fails (self ):
471+ """ Non-atomic updates fail """
472+ d = {u'action' : u'set' ,
473+ u'node' : {
474+ u'expiration' : u'2013-09-14T00:56:59.316195568+02:00' ,
475+ u'modifiedIndex' : 6 ,
476+ u'key' : u'/testkey' ,
477+ u'ttl' : 19 ,
478+ u'value' : u'test'
479+ }
480+ }
481+ res = etcd .EtcdResult (** d )
482+
483+ error = {
484+ "errorCode" :101 ,
485+ "message" :"Compare failed" ,
486+ "cause" :"[ != bar] [7 != 6]" ,
487+ "index" :6 }
488+ self ._mock_api (412 , error )
489+ res .value = 'bar'
490+ self .assertRaises (ValueError , self .client .update , res )
0 commit comments