小编nfl*_*cco的帖子

mockito回调和获取参数值

我没有运气让Mockito捕获函数参数值!我正在嘲笑搜索引擎索引而不是构建索引,我只是使用哈希.

// Fake index for solr
Hashmap<Integer,Document> fakeIndex;

// Add a document 666 to the fakeIndex
SolrIndexReader reader = Mockito.mock(SolrIndexReader.class);

// Give the reader access to the fake index
Mockito.when(reader.document(666)).thenReturn(document(fakeIndex(666))
Run Code Online (Sandbox Code Playgroud)

我不能使用任意参数,因为我正在测试查询的结果(即他们返回哪些文档).同样,我不想为每个文档指定一个特定的值并且有一行!

Mockito.when(reader.document(0)).thenReturn(document(fakeIndex(0))
Mockito.when(reader.document(1)).thenReturn(document(fakeIndex(1))
....
Mockito.when(reader.document(n)).thenReturn(document(fakeIndex(n))
Run Code Online (Sandbox Code Playgroud)

我查看了使用Mockito页面上的回调部分.不幸的是,它不是Java,我无法用Java自己解释它.

编辑(澄清):如何让Mockito获取参数X并将其传递给我的函数?我想要传递给函数的X的确切值(或ref).

我不想枚举所有情况,并且任意参数将不起作用,因为我正在测试不同查询的不同结果.

Mockito页面说

val mockedList = mock[List[String]]
mockedList.get(anyInt) answers { i => "The parameter is " + i.toString } 
Run Code Online (Sandbox Code Playgroud)

这不是java,我不知道如何转换成java或传递给函数发生的事情.

java mockito

70
推荐指数
4
解决办法
7万
查看次数

重现MySQL错误:服务器关闭连接(node.js)

我正在尝试使用节点mysql库重现我在EC2上的node.js应用程序中看到的MySQL错误:

连接丢失:服务器关闭了连接.

我无法在本地重现错误 - 我的代码处理数据库的处理很好 - 它只需每隔几秒重新检查一次,并在重新启动后重新连接到数据库.在EC2上,它发生在太平洋时间凌晨4点左右,但数据库仍然运行正常.

我想

  1. 用我的本地mysql重现崩溃
  2. 在我的mysql帮助器模块中添加我需要的任何逻辑来处理这个问题

这是我的node.js应用程序中的错误:

2012-10-22T08:45:40.518Z - 错误:uncaughtException date = Mon Oct 22 2012 08:45:40 GMT + 0000(UTC),pid = 14184,uid = 0,gid = 0,cwd =/home/ec2 -user/my-app,execPath =/usr/bin/nodejs,version = v0.6.18,argv = [/ usr/local/bin/node,/ home/ec2-user/my-app/app.js, - -my-app],rss = 15310848,heapTotal = 6311392,heapUsed = 5123292,loadavg = [0.0029296875,0.0146484375,0.04541015625],正常运行时间= 3238343.511107486,trace = [column = 13,file =/home/ec2-user/my- app/node_modules/mysql/lib/protocol/Protocol.js,function = Protocol.end,line = 63,method = end,native = false,column = 10,file = stream.js,function = Socket.onend,line = 80,method = onend,native = false,column = 20,file …

mysql node.js node-mysql

16
推荐指数
3
解决办法
2万
查看次数

苹果推送通知 - 没有有效的'aps-environment'尝试过我在网上看过的所有解决方案?

我正在试图让推送通知工作!我跟着这个教程基本没用.我已经删除了几次xcode,重做整个苹果开发证书,清理了几次登录钥匙串.这有助于解决一些问题,但最后我仍然陷入困境.

我认为我需要做什么(从阅读其他人的经验):1)我的openssl证书和密钥需要与苹果服务器交谈2)具有此openssl证书的app id具有与之关联的配置文件.3)构建(在xcode中)需要具有与之关联的适当供应配置文件4)构建标识符(在xcode中)需要与具有供应配置文件的应用程序ID具有相同的文本4)???

据我所知,所有这些都可以:

  1. 我的ssl证书+密钥很好地与苹果服务器交谈(忽略错误,我最终仍然得到提示):

MacBook-Pro:apple_dev_certification nflacco $ openssl s_client -connect gateway.sandbox.push.apple.com:2195 -key xxx.pem -cert xxx.pem输入xxx.pem的密码短语:CONNECTED(00000003)depth = 1/C = US/O = Entrust,Inc./ OU = www.entrust.net/rpa通过引用并入/ OU =(c)2009 Entrust,Inc./CN = Entrust Certification Authority - L1C验证错误:num = 20:无法获得本地发行人证书.....

2,3,4)当我创建一个新项目时,它永远不会获得正确的应用程序ip(构建设置 - >信息包标识符).如果我的配置文件与"com.xxx"匹配,则应用程序将始终为"com.xxx.FOO",因此选择了默认的IOS Team Provisioning Profile.我像那样运行应用程序,并得到:

2011-10-22 22:42:45.086 VVV [3552:707]无法获得令牌,错误:错误Domain = NSCocoaErrorDomain Code = 3000"找不到有效'aps-environment'应用程序的权利字符串"UserInfo = 0x16d140 {NSLocalizedDescription =没有为应用程序找到有效的'aps-environment'权利字符串}

4 contd)我想使用我的配置文件,它使用我的app id并启用了push,因此我将应用程序标识符更改为"com.xxx",并在构建菜单的代码签名选项中选择正确的配置文件.把它安装在我的iPhone上,同样的事情:(

我能想到的唯一的事情:

  • 我的配置文件不正确?我已经多次创建了一个新的,删除了xcode组织器中的所有现有的,但这没有帮助.
  • 代码仍然是使用团队资料而不是我的新资料签署的?有没有办法确保这个?

关于我应该在这做什么的任何想法?这不可能是这么复杂.我应该擦拭我的高清并从头开始重新安装并希望它有效吗?

iphone push-notification apple-push-notifications ios

11
推荐指数
1
解决办法
6545
查看次数

apple推送通知连接问题 - 密钥值不匹配检查私钥消息

我正在尝试为我的应用测试推送通知,但无法使用我的证书和私钥连接到苹果沙箱.我正在学习本教程.

我根据教程设置了新的证书和应用程序ID,设置了私钥,并为证书和私钥生成了.pem文件:

openssl x509 -in aps_developer_identity.cer -inform der -out PushTestCert.pem
openssl pkcs12 -nocerts -out PushTestKey.pem -in PushTestKey.p12 
Run Code Online (Sandbox Code Playgroud)

对于私钥,它要求我输入密钥的原始密码以及新密码.我使用了相同的密码.

然后我测试了与apple的连接,并提示我输入密码,然后输入密钥.pem文件的新密码,该密码与旧密码相同:

openssl s_client -connect gateway.sandbox.push.apple.com:2195 -cert PushTestCert.pem -key PushTestKey.pem
Enter pass phrase for PushTestKey.pem:
error setting private key
59244:error:0B080074:x509 certificate routines:X509_check_private_key:key values mismatch:/SourceCache/OpenSSL098/OpenSSL098-35.1/src/crypto/x509/x509_cmp.c:406:
Run Code Online (Sandbox Code Playgroud)

有什么我想念的吗?在iOS配置门户上,我的app id表示它已启用开发(推送).我试过重新下载openssl证书,没有雪茄.

iphone apple-push-notifications ios

10
推荐指数
1
解决办法
6448
查看次数

如何处理Jetty异常 - 长时间运行的HTTP请求超时,但它调用的进程永远不会终止,Jetty不满意

我有一个Jetty服务器处理长时间运行的HTTP请求 - 响应由不同的进程X生成,最后是Jetty请求定期检查的收集器哈希.

有3种情况:

  1. 进程X在HTTP请求的超时期限之前完成 - 没问题
  2. 进程X在请求的超时期限结束后完成 - 没问题
  3. 进程X永远不会完成 - 发生以下异常

如何检测这种情况(3)并防止异常,同时允许其他两种情况正常工作?

例外:

2012-06-18 00:13:31.055:WARN:oejut.QueuedThreadPool:
java.lang.IllegalStateException: IDLE,initial
    at org.eclipse.jetty.server.AsyncContinuation.complete(AsyncContinuation.java:569)
    at server.AsyncHTTPRequestProcessor.run(AsyncHTTPRequestProcessor.java:72)
    at org.eclipse.jetty.server.handler.ContextHandler.handle(ContextHandler.java:1119)
    at org.eclipse.jetty.server.AsyncContinuation$1.run(AsyncContinuation.java:875)
    at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:599)
    at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:534)
    at java.lang.Thread.run(Thread.java:679)
Run Code Online (Sandbox Code Playgroud)


Jetty继续HTTP请求:

public class AsyncHTTPRequestProcessor implements Runnable {

    private ConcurrentHashMap<String, String> collector;
    private Logger logger;
    private AsyncContext ctx;
    //Defined this here because of strange behaviour when running junit
    //tests and the response json string being empty...
    private String responseStr = null;

    public AsyncHTTPRequestProcessor(AsyncContext _ctx, 
            ConcurrentHashMap<String, String> _collector, Logger …
Run Code Online (Sandbox Code Playgroud)

java continuations asynchronous jetty

10
推荐指数
1
解决办法
1941
查看次数

swift switch语句在可选的布尔元组上

我无法弄清楚如何在交换机内的元组内使用选项.下面..Some(let ...)...语法作为非元组工作,但在元组内我得到预期的分隔符东西:(

var dict = Dictionary<String,Bool>()
dict["a"] = true

switch (dict["a"],dict["b") {
case (.Some(let a) where !a, .Some(let b) where b):
  println("false/nil, true")
case (.Some(let a) where a, .Some(let b) where !b):
  println("true, false/nil")
Run Code Online (Sandbox Code Playgroud)

我想避免做以下事情

    if let a = self.beaconList["a"] {
        if let b = self.beaconList["b"] {
            // a, b
        } else {
            // a, !b
        }
    } else {
        if let b = self.beaconList["b"] {
            // !a, b
        } else {
            // !a, !b
        }
    }
Run Code Online (Sandbox Code Playgroud)

tuples switch-statement optional swift

10
推荐指数
1
解决办法
1万
查看次数

Node.js中间件组织和参数验证

我正在构建一个快速应用程序,我想知道我可以用中间件获得多么的花哨.粗略地说,我想用中间件完成以下任务.

完成:

  • 将requestId添加到所有路由
  • 验证请求
  • 检查用户是否可以访问给定资源(除了身份验证)

尚未完成:

  • A)验证给定路线的参数
  • B)如果路由与路由不同,则以合理的方式组织中间件,每个路由常规调用3个中间件

我已经在一个单独的文件中定义了我的中间件,并将其导入app.js,如下所示:

var middleware = require('./middleware');
var requestId = middleware.requestId;
var authenticate = middleware.authenticate;
Run Code Online (Sandbox Code Playgroud)

要将它应用于所有路由,我将其添加到express config:

var app = express.createServer();
app.configure(function () {
  app.use(express.logger());
  app.use(express.cookieParser());
  app.use(express.bodyParser());
  app.use(requestId); // add requestId to all incoming requests
});
Run Code Online (Sandbox Code Playgroud)

对于路由细节,我将其添加为app.get参数:

var routes = require('./v1/routes');
app.get("/v1/foo", routes.foo);
app.get("/v1/bar", authenticate, routes.bar);
Run Code Online (Sandbox Code Playgroud)

问题A.

我很想拥有可以用来检查参数的中间件

validate('x','y','z')
Run Code Online (Sandbox Code Playgroud)

并且对于给定的路线使用它是这样的:

app.get("/v1/bar", authenticate, validate('x','y','z'), routes.bar);
Run Code Online (Sandbox Code Playgroud)

有没有办法做到这一点?或者我应该在路由定义文件中基于每个路由进行验证?

问题B

是否有更好的方法来组织和使用我应该考虑的中间件?

更新

我正在寻找一种方法来验证路由之间变化很大的参数.下面显然不起作用 - 我无法将params传递到中间件 - 但是我可以通过这种方式定义中间件来执行此操作并按照我上面所述的方式调用它吗?

var validateParams = function (req, res, params, callback) { …
Run Code Online (Sandbox Code Playgroud)

middleware node.js express connect.js

8
推荐指数
1
解决办法
8992
查看次数

如何在OSX上设置TUN接口的IP地址(没有目标地址)?

如何在OSX上为TUN接口设置IP地址?我无法弄清楚如何在不指定目标IP的情况下为我的接口设置IP地址.我不想这样做 - 我想要或多或少地在以后的某个时间点建立到任意地址的隧道.先前的问题是无益的:

  1. 一个问题答案不明确,所以我尝试按照参考.
  2. 这个问题为tun设备指定了一个指向ip地址的点,因此它有一个目的地,这正是我不想要的.

osxtuntap的页面上,它说:

ifconfig tap0 10.1.2.3 up
Run Code Online (Sandbox Code Playgroud)

我不能在OSX 10.6上使用TUN接口:

$ sudo ifconfig tun0 10.1.2.3 up
ifconfig: ioctl (SIOCAIFADDR): Destination address required
Run Code Online (Sandbox Code Playgroud)

添加网络掩码没有帮助 - OSX似乎需要目标地址:

$ ifconfig tun0 10.0.0.1/24 netmask 255.255.255.0
ifconfig: ioctl (SIOCAIFADDR): Destination address required
Run Code Online (Sandbox Code Playgroud)

对于linux,我得到它的工作原理.根据这个页面,你打开()接口,并使用ip命令,并执行此操作,我之前做过这个,没有问题:

$ ip link set tun0 up
$ ip addr add 10.0.0.1/24 dev tun0
Run Code Online (Sandbox Code Playgroud)

我想做的就是我在linux中可以做的事情.


编辑:

我正在写一个小的UDP隧道应用程序.像这样:

tun1 - > udp app#1 - > udp tunnel - > udp app#2 - > tun2

如果udp应用程序位于不同的计算机上(假设是本地和远程),我想将他们各自的tun设备与ip地址关联起来,这样我就可以通过隧道将数据包从本地发送到远程数据包了.删除计算机上的tun设备的IP地址. …

ip macos networking ifconfig tun

8
推荐指数
1
解决办法
2万
查看次数

模拟和单元测试Solr和Lucene指数

我们需要控制生产solr索引中的数据,我们需要它与新开发兼容.理想情况下,我们想在本地机器上模拟索引,用solr查询并编写单元测试来查询它以便更快地迭代.

RamDirectory在另一个问题中用于做类似的事情,但问题是从2年前开始.这个例子看起来就是这样(使用FSDirectory而不是RamDirectory).这些是解决这个问题的正确方法吗?有没有更好的方法来做到这一点?

我们想编写如下测试:

setup mock index;
query mock index;
assert(stuff that should be true);
teardown mock index;
Run Code Online (Sandbox Code Playgroud)

编辑:其他详细信息:

我们的想法是我们会构建一个索引,有一个简单的方法来添加文档而不需要索引器和系统的其余部分,除了我们可以保留在版本控制中的本地数据库.在过去,我们生成了一个索引,当出现不兼容性时,我们重新生成它.

如果我们重新索引,我们会增加很多开销,并且假设我们的索引器包含大量数据处理逻辑(比如将数据添加到数据库中的可搜索字段),模拟索引器似乎不是一个好选择.我们的索引器连接到外部数据库,所以我们也需要支持它.我们可以有一个如上所述的本地测试数据库,几乎没有开销.

一旦我们有了一个测试数据库,我们需要建立一个索引,然后我们可以关闭上面第二个链接.问题变成了我们如何真正快速地构建索引以进行测试,比如大小为1000的文档.

这样做的问题是我们需要保持本地数据库模式与生产模式同步.生产模式经常变化,这是一个问题.我们希望有一个足够灵活的测试基础设施来处理这个问题 - 到目前为止,这种方法只是每次都重建数据库,这很慢并且让其他人生气!

lucene testing solr unit-testing ramdirectory

7
推荐指数
1
解决办法
4097
查看次数

node.js套接字异常读取ETIMEDOUT - 如何正确捕获它?写超时怎么样?

我有一个代理服务器,管理一堆客户端,并与另一个http服务器进行通信.消息来回发送并定向到客户端.客户端可以并且执行超时,并且服务器具有心跳功能(每n秒重复一次),该功能将心跳发送到clientId映射到套接字连接的所有客户端.

当心跳试图与不再连接的客户端进行通信但是套接字仍处于活动状态时,我会收到"读取ETIMEDOUT"异常.我尝试暂时将套接字连接的超时设置为2000毫秒,理论是我的超时套接字事件处理程序会捕获这个(事件处理程序在tcp服务器部分),但这没有发生.死亡需要几次心跳.

部分问题肯定是我对如何构造node.js代码缺乏了解,所以如果你有任何建议,我会非常感激他们.

另一个问题是,是否可以单独处理读写超时,或者至少可以解决它们.我真正想做的是让我的心跳功能成为tcp服务器的一部分,如果它在n秒内没有从客户端听到,只发送心跳,并且只发送一次心跳.如果我们得到超时,那么我们杀死套接字,否则我们再次等待.

谢谢!

>>$ node --harmony-weakmaps server.js
Heartbeat: Sat Feb 18 2012 08:34:40 GMT+0000 (UTC)
{
    sending keep_alive to id:00:00:00:00:00:10 socket:[object Object]
}
socket:received data: {"id":"00:00:00:00:00:10","m":"keep_alive","success":"true"}

Heartbeat: Sat Feb 18 2012 08:35:40 GMT+0000 (UTC)
{
    sending keep_alive to id:00:00:00:00:00:10 socket:[object Object]
}


socket:received data: {"id":"00:00:00:00:00:10","m":"keep_alive","success":"true"}
node.js:201
        throw e; // process.nextTick error, or 'error' event on first tick
              ^
Error: read ETIMEDOUT
    at errnoException (net.js:642:11)
    at TCP.onread (net.js:375:20)
Run Code Online (Sandbox Code Playgroud)

触发超时的心跳功能:

console.log("Starting heartbeat");
var beat_period = 60;
setInterval(function() {
    if(Object.keys(id2socket).length != …
Run Code Online (Sandbox Code Playgroud)

sockets exception node.js

7
推荐指数
2
解决办法
2万
查看次数