// Returns the node created and its creation response // Don't need to check for intermediate directories here as that was already done // by the thing calling makeNode() func (me *mockEtcd) makeNode(path []string, value string, isDir bool, ttl time.Duration) (*etcd.Node, *etcd.Response, error) { var child *etcd.Node var resp *etcd.Response var ok bool node := me.nodes["/"] for i, part := range path { node, ok = me.nodes[part] if !ok { me.index += 1 if i < len(path)-1 { // intermediate node child = me.newNode(part, "", true) } else { // Final node exp := time.Now().Add(ttl) child = me.newNode(part, value, isDir) child.Expiration = &exp resp = &etcd.Response{ Action: "create", Node: me.copyNode(child, false), Index: child.CreatedIndex, } me.sendEvent(resp) } me.nodes[child.Key] = child node = child } } return node, resp, nil }